[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 475

 
А ордеров бай будет существовать одновременно не больше одного?
 
dkfl.zrjdktdbx:
Спасибо!!!

Вот стартовая ссылка - потом все остальное, ИМХО.
 
Ivn:

поясните пожалуйста

Для работы аналитической части используется жестко заданный таймфрейм. Или таймфреймы
 
Так, придумал, может немного рогато..
 int BUY;
 for( i=OrdersTotal();i>0;i--){OrderSelect(i-1,SELECT_BY_POS );if(OrderSymbol()==Symbol()&&OrderMagicNumber( )==????){
if(OrderType( )==OP_BUY){BUY++;}}} 
   if ( BUY> stsBUY) {//Alert ("NashlY BUY " );
   for ( i=OrdersTotal();i>0;i--){ OrderSelect(i-1,SELECT_BY_POS );
if( OrderMagicNumber( )==???? &&OrderSymbol()==Symbol()&&OrderType( ) ==OP_BUYSTOP) {    
 OrderDelete(OrderTicket( ) ); 
  stsBUY=BUY;  Alert ("OrderDelete-OP_BUYSTOP",  GetLastError( ) );      }

if( OrderMagicNumber( )==???? &&OrderSymbol()==Symbol()&&OrderType( ) ==OP_BUYLIMIT) {    
 OrderDelete(OrderTicket( ) ); 
  stsBUY=BUY;  Alert ("OrderDelete-OP_BUYSTOP",  GetLastError( ) );      }


}}
Не, это просто не совсем то, тут видимо при обнаружении ордера бай будут убираться все отложки.. Все бай отложки. stsBUY нужно задать до старта. На ошибки не проверял.
 
Vinin:

Для работы аналитической части используется жестко заданный таймфрейм. Или таймфреймы

вы не могли бы сбросить "рыбу" для разбора, если будут комментарии буду благодарен
 
dkfl.zrjdktdbx:
Так, придумал, может немного рогато.. Не, это просто не совсем то, тут видимо при обнаружении ордера бай будут убираться все отложки.. Все бай отложки. stsBUY нужно задать до старта. На ошибки не проверял.


Надо бы по корректнее код выкладывать. Без ошибок

И логика плохая

 
Ivn:

вы не могли бы сбросить "рыбу" для разбора, если будут комментарии буду благодарен

Вы хотя бы чуть-чуть учебник почитайте, что бы не спрашивать сколько будет «дважды два».

 
FelixFX:

Вы хотя бы чуть-чуть учебник почитайте, что бы не спрашивать сколько будет «дважды два».


не спорю важное замечание, но если бы я это понял, я бы не спрашивал, логично?,

то есть в алгоритме, где указаны таймфремы в индикаторах, четко прописываем.

Правильно?

тогда объясните мне следующее ....

советник - пересечение стохастика, вход в сделку. пара евро доллар, таймфрем 30.

вот алгоритм

int start()
{
RefreshRates(); // Обновление данных
Symb=Symbol();

x1=x;
y1=y;

x=iStochastic( NULL,0,5,3,3,MODE_SMA,1,0,0); // значение стохастика основная линия на 0 баре
y=iStochastic( NULL,0,5,3,3,MODE_SMA,1,1,0); // значение стохастика сигнальная линия на 0 баре
Alert ("стохастик основная",x);
Alert ("стохастик сигнальная",y);

//----пересечение сигнальной и основной линии
if (y < x && y1> x1) // Проверка прохода вверх
{
f=1; // флаг вверх
}
//--------------------------------------------------------------------
if (y > x && y1< x1) // Проверка прохода вниз
{
f=2; //флаг вниз
}
//----проверка пересечения основной линии снизу вверх линии 20
if (f==1 && x1<20 && x>= 20)
{ if (Ticket > 0) // если есть ордер убираем
OrderClose(Ticket,Lts,Bid,10);
SL=Bid - StopLoss*Point; // Вычисление SL откр.
TP=Bid + TakeProfit*Point; // Вычисление TP откр.
Alert("Попытка открыть Buy. Ожидание ответа..");
OrderSelect(Ticket, SELECT_BY_TICKET);
if(OrderCloseTime()>0 || !OrderSelect(Ticket, SELECT_BY_TICKET))
{

Ticket=OrderSend(Symb,OP_BUY,Lts,Ask,3,SL,TP);//Открытие Buy
}

if (Ticket > 0) // Получилось :)
{
Alert ("Открыт ордер Buy ",Ticket);
return;
f=0; // обнуляем флаг
}

}
//----проверка пересечения основной линии сверху вниз линии 80
if (f==2 && x1>80 && x<= 80)
{ if (Ticket > 0)
OrderClose(Ticket,Lts,Ask, 10); // если есть ордер убираем
SL=Ask + StopLoss*Point; // Вычисление SL откр.
TP=Ask - TakeProfit*Point; // Вычисление TP откр.
Alert("Попытка открыть Sell. Ожидание ответа..");
OrderSelect(Ticket, SELECT_BY_TICKET);
if(OrderCloseTime()>0 || !OrderSelect(Ticket, SELECT_BY_TICKET))
{
Ticket=OrderSend(Symb,OP_SELL,Lts,Bid,3,SL,TP);//Открытие Buy
}
if (Ticket > 0) // Получилось :)
{
Alert ("Открыт ордер Sell ",Ticket);
return;
f=0; // обнуляем флаг
}

}


return(0);
}

если запустим, то советник будет открываеть и закрывать ордера в течении получаса, то есть отрывать в 9.04 закрывать в 9.05. опять открывать в 9.06. и закрывать в 9.07 и т.д. причем в одном направлении.

почему это происходит?

с уважением.

 
sss2019:
И если у меня открыто два ордера BUYLIMIT и BUYSTOP, мне нужно при срабатывании BUYLIMIT удалить BUYSTOP и наоборот. Подскажите как можно выполнить такое условие?

Вообще-то логика примерно таковой должна быть:

1. Если есть два отложенных ордера и нет ни одной позиции, значит в переменных запомните тикеты этих отложенных ордеров.

2. Если есть отложенный СеллСтоп и нету отложенного БайСтоп, если есть позиция Бай, сравниваете тикет последней открытой позиции Бай и запомненный тикет БайСтоп.

Если они равны - значит БайСтоп преобразовался в рыночный Бай --> если есть отложенный СеллСтоп - удаляем его.

3. Если есть отложенный БайСтоп и нету отложенного СеллСтоп, если есть позиция Селл, сравниваете тикет последней открытой позиции Селл и запомненный тикет СеллСтоп.

Если они равны - значит СеллСтоп преобразовался в рыночный Селл --> если есть отложенный БайСтоп - удаляем его.

Примерно так... это только набросок логики. Он ещё должен функциями обрасти.

 
Ну, извините, это я так, по-быстрому.. Собственно, да, виноват,это не в ту степь. Надо бы, именно надо ордера на истории перебирать,находить последний и... и... Нет.. А в прямь,не соображу..
Причина обращения: