Во-первых, у тебя довольно странно вызывается iCustom(): параметров у твоего "(12345)" нету, что ли? Но не это главное.
И, во-вторых, странное условие: ( iCustom(...) НЕ РАВНО EMPTY_VALUE ) И ( iCustom(...) РАВНО EMPTY_VALUE ) . Во втором iCustom() параметры абсолютно те же.
Так не бывает, с таким "И" ордер не закроется никогда... Сделай, что ли, что-то, чтобы твои iCustom() были не настолько идентичными.
P.S. Не люблю копаться в коде, написанном не мной, но тут уж слишком очевидно.
if (iCustom(NULL,0,"(T_S_R)",1,1) == EMPTY_VALUE && iCustom(NULL,0,"(T_S_R)",0,1) != EMPTY_VALUE)
По пробую объянить все это!!!!
iCustom вызывает индикатор с названием " (T_S_R) " который находится в папке \indicators.....с этим разобрались....
Далее, NULL это всем понятно.
Потом 1,1...
Первое 1 - это mode, то есть соответствует линии SetIndexBuffer в индикаторе....
Второе 1 - Индекс получаемого значения из индикаторного буфера сдвиг относительно текущего бара на указанное количество периодов назад.
EMPTY_VALUE - Значение по умолчанию, указатель пустого значения. Используется в пользовательских индикаторах....т.е. если равно, то это зеленая линия, а если не равно, то красная, или наоборот....
Другими словами: используется расчет из индикатора с именем " (T_S_R) " на текущем графике зеленая линия которая равна пустому значению на предыдущем баре и расчет из индикатора с именем " (T_S_R) " на текущем графике,красная линия которая не равна пустому значению на предыдущем баре...
slayer, это понятно, что ты объясняешь. Но условие-то твое для закрытия ордера никогда не выполняется! А=В И А#B. Так бывает?
Возможно!!!! Ну а вообще к примеру
if //свой код
{
a=OrderSend ( Symbol (), OP_BUY, lot, Ask, 3, 0, 0 );
}
if //обратный код
{
OrderClose ( a, 1, Ask, 3 );
}
Тогда ордер "а" закроется, или что-то нужно еще к открытому ордеру добавить....???
Этот чудо код может сработать только если условия выполнятся на одном тике. К следующему тику переменная order_id будет переобъявлена...
З.Ы. И Mathemat абсолютно прав, с условиями бред у Вас выходит
int start() { int order_id,total,a; //---- a=iCustom(NULL,0,"(12345)",1,1); total=OrdersTotal(); if(total<1) { if (a==true) { order_id=OrderSend(Symbol(),OP_BUY,lot,Ask,3,0,0); } } return(0); }Сделал по другому, но так вообще не торгует!!! вроде при компеляции ошибок не выдавал, что это может быть??? вроде все правильно????
Этот чудо код может сработать только если условия выполнятся на одном тике. К следующему тику переменная order_id будет переобъявлена...
З.Ы. И Mathemat абсолютно прав, с условиями бред у Вас выходит
static int id_order;
start()
{
if //свой код
{
id_order=OrderSend ( Symbol (), OP_BUY, lot, Ask, 3, 0, 0 );
}
if //обратный код
{
OrderClose (id_order, 1, Ask, 3 );
}
работать будет но только в свинге и при одной позе в рынке
да и еще при перезапуске советника переменная id_order все равно пропадет
потому такое чудо лучше не писать или писать иначе
вообще если управлять не одним ордером! то код ( МЕНЕДЖЕРА ТОРГОВЫХ ОПЕРАЦИЯ) сложней будет
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Проблема у меня такая, есть индикатор " (12345) " ... по нему написан советник через функцию iCustom. не могу понять, почему у меня этот код не работает!!! Открывает только одну позицию и в конце теста ее закрывает....
Если убрать:
if ( iCustom ( NULL, 0, " (12345) ", 1, 0 ) != EMPTY_VALUE && iCustom ( NULL, 0, " (12345) ", 1, 0 ) == EMPTY_VALUE )
{
OrderClose ( order_id, 1, Ask, 3 ) ;
}
и впипасть в код order_id = OrderSend ( Symbol (), OP_BUY, lot, Ask, 3, 0, 0 ) ; тейк профит и стоп, тогда код работает и закрывается по стопу и профиту...а мне нужно что бы открывалась позиция и при смене пораметров if эта позиция закрывалась...Подскажите люди!!!