Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 681

 
Igor Makanu:

наверное так, для продажи:

profit=NormalizeDouble((OrderOpenPrice()-Ask)*MarketInfo(_Symbol,MODE_TICKVALUE)*lot/Point,2);

для покупки по Bid считать  , т.е.           ( Bid - OrderOpenPrice())

 Тейк_Профит =100 пп лот =0.1 сколько будет профит, открытой позиции, в валюте, когда позиция закроется по Т\П?

profit=NormalizeDouble((OrderOpenPrice()-Тейк_Профит*Point)*MarketInfo(_Symbol,MODE_TICKVALUE)*lot/Point,2);

так не получается. 

 
Vitaly Muzichenko:

Нужно оперировать: Лот -> Деньги -> Расстояние, ну и стоимость тика

Деньги, как раз, нужно узнать )

 
Vitaly Muzichenko:

Решение не учитывает комиссии и свопы. По пунктам вроде в прибыли, а с издержками - потери.

с комиссиями и свопами  не нравится мне формула OrderProfit()+ OrderComission()+OrderSwap()

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

Ghabo:

 Тейк_Профит =100 пп лот =0.1 сколько будет профит, открытой позиции, в валюте, когда позиция закроется по Т\П?

так не получается. 

математика не Ваш конек ? ;)

а так:

profit=NormalizeDouble((Тейк_Профит *Point)*MarketInfo(_Symbol,MODE_TICKVALUE)*lot/Point,2);

если сократить, то будет

profit=NormalizeDouble(lot * Тейк_Профит * MarketInfo(_Symbol,MODE_TICKVALUE),2);

 
Vitaly Muzichenko:

Здесь имеется ввиду, что в расчёте нужно задействовать OrderProfit()

Как перед отправкой приказа на открытие позиции рассчитать лот будущей позиции так, чтобы при срабатывании тейкпрофит получить прибыль в 20 USD ? OrderProfit() тут не поможет - нет ещё никакой позиции.

Или иначе: Каким должен быть тейкпрофит будущей позиции, чтобы при открытии лотом 0.1 получить прибыль в 20 USD ? И тут OrderProfit() не поможет - по той же причине.

А можно и так: Каким должен быть стоплосс будущей позиции, чтобы при открытии лотом 0.1 получить убыток не более 3% от свободных средств? И тут OrderProfit() не поможет - по той же причине.

upd: все расчёты получатся приблизительными без знания комиссии и свопа. Придётся регулировать стоп-приказы уже "по месту" если нужна точность до цента или пункта.

 
Artyom Trishkin:

Как перед отправкой приказа на открытие позиции рассчитать лот будущей позиции так, чтобы при срабатывании тейкпрофит получить прибыль в 20 USD ? OrderProfit() тут не поможет - нет ещё никакой позиции.

Или иначе: Каким должен быть тейкпрофит будущей позиции, чтобы при открытии лотом 0.1 получить прибыль в 20 USD ? И тут OrderProfit() не поможет - по той же причине.

Я только написал, и понял что нужно рассчитать перед открытием, и сразу удалил сообщение. Как вы лихо ответили)

Я однажды писал такое, и в качестве комиссии вбивал сумму на 1 лот во входных параметрах.

 
Здравствуйте, не могу разобраться, помогите пожалуйста. Что в этом коде не так? Вывожу в комментарии среднее значение, а оно увеличивается с каждым тиком? Помогите:-))))
 for(shift = 0; shift <= Bars-1; shift++)
  {
      zz = iCustom(NULL, 0, "ZigZag", ExtDepth, ExtDeviation, ExtBackstep, 0, shift);
           if(zz > 0.0)
           {
           HZZ[ww]=zz;
           ww++;          
           }
  }
   
  
       for(ww=0;ww<=nn;ww++){
      if(HZZ[ww]>HZZ[ww+1]){SredRazmax += HZZ[ww];}     
      if(HZZ[ww]<HZZ[ww+1]){SredRazmin += HZZ[ww+1];}
      
       
  Comment("Средний размах = ", (SredRazmax-SredRazmin)/nn,",",HZZ[0],",",HZZ[1],",",HZZ[2],",",HZZ[3],",",HZZ[4]); 
 
Dmitry Belov:
 а оно увеличивается с каждым тиком? Помогите:-))))

значит Вы считаете на каждом тике представленный Вами код и не инициализируете переменные SredRazmax и SredRazmin

инициализации переменных перед использованием хорошая привычка, так в ВУЗах учат, это сокращает время при поиске багов ;)

 

Коллеги, почему данный код отказывается исполняться в тестере стратегий, при этом корректно выполняется в режиме реального времени. Речь идёт конкретно о функции OnChartEvent(). В режиме визуализации в тестере она на исполняется при клике по кнопкам. 

input double lot=0.1;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   ButtonCreate("ButtonBuy",100,100,200,40,"Buy",15,clrBlue);
   ButtonCreate("ButtonSell",100,200,200,40,"Sell",15,clrRed);
   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
   long cid=ChartID();
   if(id==CHARTEVENT_OBJECT_CLICK && sparam=="ButtonBuy")
     {
      if(OrderSend(_Symbol,OP_BUY,lot,Ask,200,0,0,NULL,0,0,clrBlue)==-1)
         Print("Error: ",GetLastError());
      ObjectSetInteger(cid,"ButtonBuy",OBJPROP_STATE,false);
     }
   if(id==CHARTEVENT_OBJECT_CLICK && sparam=="ButtonSell")
     {
      if(OrderSend(_Symbol,OP_SELL,lot,Bid,200,0,0,NULL,0,0,clrRed)==-1)
         Print("Error: ",GetLastError());
      ObjectSetInteger(cid,"ButtonSell",OBJPROP_STATE,false);
     }
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+ 
//| ButtonCreate                                                     | 
//+------------------------------------------------------------------+ 
void ButtonCreate(string name,int x,int y,int width,int height,
                  string text,int font_size,color back_clr)
  {
   long cid=ChartID();
   int subWind=0;
   ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER;
   string font="Cambria";
   color text_clr=clrBlack;
   color border_clr=clrBlack;
   bool state=false;
   bool back=false;
   bool selectable=false;
   bool selected=false;
   bool hidden=true;
   long zorder=0;
   if(ObjectFind(cid,name)==-1)
     {
      ObjectCreate(cid,name,OBJ_BUTTON,subWind,0,0);
      ObjectSetInteger(cid,name,OBJPROP_XDISTANCE,x);
      ObjectSetInteger(cid,name,OBJPROP_YDISTANCE,y);
      ObjectSetInteger(cid,name,OBJPROP_XSIZE,width);
      ObjectSetInteger(cid,name,OBJPROP_YSIZE,height);
      ObjectSetInteger(cid,name,OBJPROP_CORNER,corner);
      ObjectSetString(cid,name,OBJPROP_TEXT,text);
      ObjectSetString(cid,name,OBJPROP_FONT,font);
      ObjectSetInteger(cid,name,OBJPROP_FONTSIZE,font_size);
      ObjectSetInteger(cid,name,OBJPROP_COLOR,text_clr);
      ObjectSetInteger(cid,name,OBJPROP_BGCOLOR,back_clr);
      ObjectSetInteger(cid,name,OBJPROP_BORDER_COLOR,border_clr);
      ObjectSetInteger(cid,name,OBJPROP_BACK,back);
      ObjectSetInteger(cid,name,OBJPROP_STATE,state); 
      ObjectSetInteger(cid,name,OBJPROP_SELECTABLE,selectable);
      ObjectSetInteger(cid,name,OBJPROP_SELECTED,selected);
      ObjectSetInteger(cid,name,OBJPROP_HIDDEN,hidden);
      ObjectSetInteger(cid,name,OBJPROP_ZORDER,zorder);
     }
  }
//+------------------------------------------------------------------+
 
Oleg Remizov:

Коллеги, почему данный код отказывается исполняться в тестере стратегий, при этом корректно выполняется в режиме реального времени. Речь идёт конкретно о функции OnChartEvent(). В режиме визуализации в тестере она на исполняется при клике по кнопкам. 

Потому, что в МТ4 OnChartEvent() в тестере не работает. Проверяйте в тестере флаг состояния кнопок.
 
Artyom Trishkin:
Потому, что в МТ4 OnChartEvent() в тестере не работает. Проверяйте в тестере флаг состояния кнопок.

Вот спасибо! Были такие подозрения, но в справке не нашёл информации, что OnChartEvent() в тестере не работает.

Причина обращения: