Проблема с закрытием открытых ордеров!! ПОМОГИТЕ!

 
int start()
  {
  int order_id,total;
//----
   if(Bars<100)
     {
      Print("bars less than 100");
      return(0);  
     }
total=OrdersTotal();
   if(total<1) 
{
        if (iCustom(NULL,0,"(12345)",1,1) == EMPTY_VALUE && iCustom(NULL,0,"(12345)",0,1) != EMPTY_VALUE)
  {
order_id=OrderSend(Symbol(),OP_BUY,lot,Ask,3,0,0);
 
  }
}  
if (iCustom(NULL,0,"(12345)",1,0) != EMPTY_VALUE && iCustom(NULL,0,"(12345)",1,0) == EMPTY_VALUE)
{
OrderClose(order_id,1,Ask,3);
}
 return(0);
    }

Проблема у меня такая, есть индикатор " (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 эта позиция закрывалась...Подскажите люди!!!

 

Во-первых, у тебя довольно странно вызывается 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. Так бывает?
 
Mathemat:
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);
    }
Сделал по другому, но так вообще не торгует!!! вроде при компеляции ошибок не выдавал, что это может быть??? вроде все правильно????
 

И вовсе бред. Переменная a типа int, ей присваивается значение индикатора, а затем она сравнивается с true. Вас ничего не смущает?

 
Figar0:

Этот чудо код может сработать только если условия выполнятся на одном тике. К следующему тику переменная 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 все равно пропадет
потому такое чудо лучше не писать или писать иначе


вообще если управлять не одним ордером! то код ( МЕНЕДЖЕРА ТОРГОВЫХ ОПЕРАЦИЯ) сложней будет