Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Хочешь стать известным разработчиком? Выполняй заказы трейдеров в сервисе Фриланс!
Ivan Katsko
559
Ivan Katsko 2011.09.05 14:13 
Есть ли среди присутствующих участники конкурса на GO Markets? У меня есть вопрос в этой связи...
Олег avtomat
4883
Олег avtomat 2011.09.06 03:38  
Задайте вопрос -- и вам ответят ;)
Ivan Katsko
559
Ivan Katsko 2011.09.06 07:02  
Ниже привожу код советника, который формирует команду открытия ордера. В коде все цены нормализованы. А командой Print я вывожу информацию о том, в каком виде в конкретный момент времени была сформирована команда на открытие ордера. Вот пример реально сформированной команды: 2011.09.06 02:30:08: OrderSend(EURUSD,OP_BUY,4,1.40732,4,1.35732,1.41982,iK_TF: 3102 : EURUSD_PERIOD_M5,3102,0,32768)

По вопросу близости к рынку здесь видно, что TakeProfit = 1.41982-1.40732=1250 пунктов, a StopLoss = 1.40732-1.35732=5000пунктов. Нельзя сказать, что выставляемый ордер близок к рынку. Тем не менее получаю ошибку 130!!!

P.S.: 2011.09.06 02:30:08 - время терминала.

int OpenBuy() {
   int err, ticket;
   color myColor = Green;
   
   if (MarketInfo(Symbol(), MODE_STOPLEVEL) > 2*spread) double shift = MarketInfo(Symbol(), MODE_STOPLEVEL);
   else shift = 2*spread;

   Print("StopLoss=",StopLoss," TakeProfit=",TakeProfit," STOPLEVEL=",MarketInfo(Symbol(), MODE_STOPLEVEL));
   double myPrice      = NormalizeDouble(Ask/* - shift*Point*/,Digits);
   double myTakeProfit = NormalizeDouble(myPrice + TakeProfit*Pnt,Digits);                                                     //
   double myStopLoss   = NormalizeDouble(myPrice - StopLoss*Pnt,Digits);
   sl_up = StopLoss*Cor;
   int h = 1;
   int slp = Slippage;
   while (h < 5) {
      Print("Попытка ",h,": OrderSend(",Symbol(),",OP_BUY,",lotMM,",",DoubleToStr(myPrice,Digits),",",Slippage,",",DoubleToStr(myStopLoss,Digits),",",DoubleToStr(myTakeProfit,Digits),",",ExpertName,",", MagicNumber,",0,",myColor,")");
      ticket=OrderSend(Symbol(),OP_BUY,lotMM,myPrice,slp,myStopLoss,myTakeProfit,ExpertName, MagicNumber,0,myColor);
      Print("ticket=",ticket);
      if(ticket<=0) {
         h++;
         slp = slp*2;
      }  else break;  
   }
   string MyTxt;
   MyTxt = " for " + DoubleToStr(myPrice,4); 
         
   if(ticket<=0) {
      err=GetLastError();
      Print("iK_TF: Error opening Open Buy order [" + ExpertName + "]: (" + err + ") " + ErrorDescription(err) + " /// " + MyTxt);
      return(0);
   } else {
      OrderSelect(0, SELECT_BY_POS, MODE_TRADES);
      price_buy = OrderOpenPrice();
   }
   return(1);
}
PapaYozh
3768
PapaYozh 2011.09.06 09:27  
ikatsko:
Ниже привожу код советника, который формирует команду открытия ордера. В коде все цены нормализованы. А командой Print я вывожу информацию о том, в каком виде в конкретный момент времени была сформирована команда на открытие ордера. Вот пример реально сформированной команды: 2011.09.06 02:30:08: OrderSend(EURUSD,OP_BUY,4,1.40732,4,1.35732,1.41982,iK_TF: 3102 : EURUSD_PERIOD_M5,3102,0,32768)

По вопросу близости к рынку здесь видно, что TakeProfit = 1.41982-1.40732=1250 пунктов, a StopLoss = 1.40732-1.35732=5000пунктов. Нельзя сказать, что выставляемый ордер близок к рынку. Тем не менее получаю ошибку 130!!!

P.S.: 2011.09.06 02:30:08 - время терминала.




а там можно стопы сразу ставить?
ir0407
112
ir0407 2011.09.06 09:36  
ikatsko:
Ниже привожу код советника, который формирует команду открытия ордера. В коде все цены нормализованы. А командой Print я вывожу информацию о том, в каком виде в конкретный момент времени была сформирована команда на открытие ордера. Вот пример реально сформированной команды: 2011.09.06 02:30:08: OrderSend(EURUSD,OP_BUY,4,1.40732,4,1.35732,1.41982,iK_TF: 3102 : EURUSD_PERIOD_M5,3102,0,32768)

По вопросу близости к рынку здесь видно, что TakeProfit = 1.41982-1.40732=1250 пунктов, a StopLoss = 1.40732-1.35732=5000пунктов. Нельзя сказать, что выставляемый ордер близок к рынку. Тем не менее получаю ошибку 130!!!

P.S.: 2011.09.06 02:30:08 - время терминала.




Вероятнее всего у вас счет типа "Market Execution". На счетах этого типа запрещено ставить стопы в момент постановки ордера т.к. невозможно заранее знать где конкретно он будет поставлен. В этом случае ставьте ордер без стопов, а после успешной установки модифицируйте ему стопы в соответствии с вашими предпочтениями. На счетах типа "Instant Execution" стопы можно ставить одновременно с постановкой ордера. Спросите гугля по этому поводу. Он все знает... :)
Ivan Katsko
559
Ivan Katsko 2011.09.06 10:41  
ir0407:

Вероятнее всего у вас счет типа "Market Execution". На счетах этого типа запрещено ставить стопы в момент постановки ордера т.к. невозможно заранее знать где конкретно он будет поставлен. В этом случае ставьте ордер без стопов, а после успешной установки модифицируйте ему стопы в соответствии с вашими предпочтениями. На счетах типа "Instant Execution" стопы можно ставить одновременно с постановкой ордера. Спросите гугля по этому поводу. Он все знает... :)


Да, оказалось в этом причина. Спасибо. А как же с помощью MQL вытащить эту информацию? ("Market Execution"/"Instant Execution")
ir0407
112
ir0407 2011.09.06 11:04  
ikatsko:


Да, оказалось в этом причина. Спасибо. А как же с помощью MQL вытащить эту информацию? ("Market Execution"/"Instant Execution")

Никак. :) Просто надо внимательно читать информацию по условиям счета, когда открываете новый счет. А в советнике лучше сделать открытие ордеров по "Market Execution". Такое открытие будет нормально работать и на счетах типа "Instant Execution".
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий