Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 815

 
evillive:

И когда, по-вашему, должен закрыться этот вот цикл

?

Исправил:

if(R==0)

{

 while(true)

 {

  Sleep(30000);

  Alert("Ошибка!");

  DeleteBuy=OrderDelete(OrderTicketBuy);

  DeleteSell=OrderDelete(OrderTicketSell);

  return(1);

 }

}

 

Расчет прибыли тоже.

 Вставил в цикл while (true) сообщение и обработку ошибок. Цикл работает,сообщение пишется, ошибок нет. Но  не  проходит по условию, данные будто не обновляются.

Файлы:
test3_7.mq4  16 kb
 
CJIeCaPb:

 Вставил в цикл while (true) сообщение и обработку ошибок. Цикл работает,сообщение пишется, ошибок нет. Но  не  проходит по условию, данные будто не обновляются.

Дам ещё подсказок.

Вот этот цикл рассматривает не все ордера, кроме того, если ордеров одного типа больше, чем один (например, выставлено три ордера байстоп), то что тогда будет?

for(i=1;i<=OrdersTotal();i++)
{
 Alert(i);
 if(OrderSelect(i-1,SELECT_BY_POS)==true)
 {
  if(OrderSymbol()!=Symb)continue;
  if(OrderType()==OP_BUYSTOP)
  {
   OrderTicketBuy=OrderTicket();
   Alert("Buy");
   }
   if(OrderType()==OP_SELLSTOP)
   {
   OrderTicketSell=OrderTicket();
   Alert("Sell");
   }
  }
}


Вот тут сначала рассматривается тип ордера, а уже потом этот ордер выбран, вобще-то должно быть наоборот, сначала выбрать ордер, а уже если ордер выбран - смотреть его тип и по-всякому над ним глумиться:

while(OrderType()==OP_BUY)//Buy
{
 RefreshRates();
 
 SelectBuy=OrderSelect(OrderTicketBuy,SELECT_BY_TICKET);
 ...
}
 
//--------------------------------------------------------------------------
//Sell
while(OrderType()==OP_SELL)
{
 RefreshRates();
  
 SelectSell=OrderSelect(OrderTicketSell,SELECT_BY_TICKET);
 ...
}
 


И в "свитче-который-типа-тралит-стоплосс", почему именно continue везде??? И когда будет исполнена вот эта строчка, в одном и во втором свитче?

    CloseBuy=OrderClose(OrderTicketBuy,Lote,Bid,1); continue;//119
-----
    CloseSell=OrderClose(OrderTicketSell,Lote,Ask,1); continue;//119
 
evillive:


Вот тут сначала рассматривается тип ордера, а уже потом этот ордер выбран, вобще-то должно быть наоборот, сначала выбрать ордер, а уже если ордер выбран - смотреть его тип и по-всякому над ним глумиться:

так вот:

if(R==1)//238

{

 Alert("yes");

 R=0;

 SelectBuy=OrderSelect(OrderTicketBuy,SELECT_BY_TICKET);

}


if(R==2)//245

{

 Alert("yes");

 R=0;

 SelectSell=OrderSelect(OrderTicketSell,SELECT_BY_TICKET);

}

 

И в "свитче-который-типа-тралит-стоплосс"( =D. Что Вам не нравиться? По моему норм вариант, очень наглядно.   ), почему именно continue везде??? И когда будет исполнена вот эта строчка, в одном и во втором свитче? 

 Так он пробьется по условию:

 Timen=OrderCloseTime();

 if(Timen>0)

 {

  DeleteSell=OrderDelete(OrderTicketSell);

  OldProfit=0;

  WarBuy=true;

  break;

 }

 Ну  вообще да, break будет лучше смотреться в строке OrderClose. Тогда нужно будет еще прописать OrderDelete.

 

evillive:

Дам ещё подсказок.

Вот этот цикл рассматривает не все ордера, кроме того, если ордеров одного типа больше, чем один (например, выставлено три ордера байстоп), то что тогда будет?

 OrdersTotal от 1 идет, а OrderSelect от 0. Все верно. 

Больше одного ордера одного типа на 1 фин инструменте? Исключено. Но посмотрю еще.

 

 Нужно условие максимально приближенное к этому: "если MA==цене, то".

Такое  пойдет:

if((MA>Open[0] && MA<Close[0]) || (MA<Open[0] && MA>Open[0]))

  

 

 

P.S.: С Новым годом! 

 
Кому-то и новый год не Новый год. С Новым годом!!!
 

С Новым годом!

Недавно начал изучение MQL 4 и хотел задать вопрос:

Например у меня  есть условие открытия ордера:

 if (Bid>=SS+5*Point)

  OrderSend(Symbol(),OP_BUY,Lot,Ask,10,Ask-SL*Point,Ask+TP*Point,NULL,Magic,0,Green);

Теперь собственно вопрос : какое нужно прописать условие для открытия второго ордера в случае если у первого ордера прибыль  10 пунктов и более?

 
lexdemon:

С Новым годом!

Недавно начал изучение MQL 4 и хотел задать вопрос:

Например у меня  есть условие открытия ордера:

 if (Bid>=SS+5*Point)

  OrderSend(Symbol(),OP_BUY,Lot,Ask,10,Ask-SL*Point,Ask+TP*Point,NULL,Magic,0,Green);

Теперь собственно вопрос : какое нужно прописать условие для открытия второго ордера в случае если у первого ордера прибыль  10 пунктов и более?

Поищите здесь, там множество функций почти на все случаи.

https://www.mql5.com/ru/forum/131859

 
lexdemon:

С Новым годом!

Недавно начал изучение MQL 4 и хотел задать вопрос:

Например у меня  есть условие открытия ордера:

 if (Bid>=SS+5*Point)

  OrderSend(Symbol(),OP_BUY,Lot,Ask,10,Ask-SL*Point,Ask+TP*Point,NULL,Magic,0,Green);

Теперь собственно вопрос : какое нужно прописать условие для открытия второго ордера в случае если у первого ордера прибыль  10 пунктов и более?

Предварительно выбрав ордер OrderSelect (Тикет_первого_ордера, SELECT_BY_TICKET);

     if(OrderOpenPrice()+10*Point==Ask)

 OrderSend(Symbol(),OP_BUY,Lot,Ask,10,Ask-SL*Point,Ask+TP*Point,NULL,Magic,0,Green);

 
CJIeCaPb

 Нужно условие максимально приближенное к этому: "если MA==цене, то".

Такое  пойдет:

if((MA>Open[0] && MA<Close[0]) || (MA<Open[0] && MA>Open[0]))


Ура, заработало кажется. Вставил в каждый цикл return и оператор "O" чтобы не проходил не нужные операции. 

Одна проблема: ордера выставляет криво - не знаю как сформулировать условие.

Файлы:
test3.mq4  16 kb
 

здравствуйте,  раньше задавал тут вопрос такой, сказали что проблема в трейдере.  в тех поддержке сказали что это проблема в терминале.  гляньте нет ли у вас такой же неприятности в метатрейдере 4. трейдер у меня форексстарт , если это имеет роль.

суть в чем, я написал торгового робота , который работает по минутному графику. он анализирует историю. на многих графиках история предоставляется где-то примерно на полтора месяца и больше нет, хотя на часовом - дневном - годичном графике история есть. есть еще такие случаи когда возвращает по определенную дату, далее обрыв, и граффик продолжается спустя пару месяцев назад, хотя на графиках повыше опять все есть.

как можно с этим бороться?


 
pycha:

здравствуйте,  раньше задавал тут вопрос такой, сказали что проблема в трейдере.  в тех поддержке сказали что это проблема в терминале.  гляньте нет ли у вас такой же неприятности в метатрейдере 4. трейдер у меня форексстарт , если это имеет роль.

суть в чем, я написал торгового робота , который работает по минутному графику. онанализирует историю. на многих графиках история предоставляется где-топримерно на полтора месяца и больше нет, хотя на часовом - дневном -годичном графике история есть. есть ещетакие случаи когда возвращает по определенную дату, далее обрыв, играффик продолжается спустя пару месяцев назад, хотя на графиках повышеопять все есть.

как можно с этим бороться?


Если спустя несколько циклов удаления - скачивания истории с сервера ДЦ разрывы всё ещё есть, значит такую историю они вам предоставлют. Гуглите Tickstory Lite и готовьте много места на диске для тиковой истории, потом скармливаете эту историю тестеру и будет вам М1 за десяток лет или больше.
Причина обращения: