任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 800

 

转移现金点的利润是否正确?

(OrderProfit()+OrderCommission()+OrderSwap())/OrderLots()*MarketInfo(Symbol(),MODE_TICKVALUE)*(MarketInfo(Symbol(),MODE_POINT)/MarketInfo(Symbol(),MODE_TICKSIZE))
 
下午好!请帮助理解功能,以及它是如何工作的,提前感谢。
//+----------------------------------------------------------------------------+
//+----------------------------------------------------------------------------+
//|  Версия   : 28.11.2006                                                     |
//|  Описание : Модификация одного предварительно выбранного ордера.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    pp - цена установки ордера                                              |
//|    sl - ценовой уровень стопа                                              |
//|    tp - ценовой уровень тейка                                              |
//|    ex - дата истечения                                                     |
//+----------------------------------------------------------------------------+
void ModifyOrder(double pp=-1,double sl=0,double tp=0,datetime ex=0) 
  {
   bool   fm;
   color  cl=IIFc(OrderType()==OP_BUY
                  || OrderType()==OP_BUYLIMIT
                  || OrderType()==OP_BUYSTOP, clModifyBuy, clModifySell);
   double op,pa,pb,os,ot;
   int    dg=MarketInfo(OrderSymbol(),MODE_DIGITS),er,it;

   if(pp<=0) pp=OrderOpenPrice();
   if(sl<0 ) sl=OrderStopLoss();
   if(tp<0 ) tp=OrderTakeProfit();

   pp=NormalizeDouble(pp, dg);
   sl=NormalizeDouble(sl, dg);
   tp=NormalizeDouble(tp, dg);
   op=NormalizeDouble(OrderOpenPrice() , dg);
   os=NormalizeDouble(OrderStopLoss()  , dg);
   ot=NormalizeDouble(OrderTakeProfit(), dg);

   if(pp!=op || sl!=os || tp!=ot) 
     {
      for(it=1; it<=NumberOfTry; it++) 
        {
         if(!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
         while(!IsTradeAllowed()) Sleep(5000);
         RefreshRates();
         fm=OrderModify(OrderTicket(),pp,sl,tp,ex,cl);
         if(fm) 
           {
            if(UseSound) PlaySound(SoundSuccess); break;
              } else {
            er=GetLastError();
            if(UseSound) PlaySound(SoundError);
            pa=MarketInfo(OrderSymbol(), MODE_ASK);
            pb=MarketInfo(OrderSymbol(), MODE_BID);
            Print("Error(",er,") modifying order: ",ErrorDescription(er),", try ",it);
            Print("Ask=",pa,"  Bid=",pb,"  sy=",OrderSymbol(),
                  "  op="+GetNameOP(OrderType()),"  pp=",pp,"  sl=",sl,"  tp=",tp);
            Sleep(1000*10);
           }
        }
     }
  }
//+----------------------------------------------------------------------------+
//+----------------------------------------------------------------------------+
//|  Версия   : 11.09.2008                                                     |
//|  Описание : Сопровождение позиций простым тралом                           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ( ""  - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   ( -1  - любая позиция)                  |
//|    mn - MagicNumber                ( -1  - любой магик)                    |
//+----------------------------------------------------------------------------+
void SimpleTrailing(string sy="",int op=-1,int mn=-1) 
  {
   double po,pp;
   int    i,k=OrdersTotal();

   if(sy==NULL) sy=Symbol();
   for(i=0; i<k; i++) 
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) 
        {
         if((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) 
           {
            po=MarketInfo(OrderSymbol(),MODE_POINT);
            if(mn<0 || OrderMagicNumber()==mn) 
              {
               if(OrderType()==OP_BUY) 
                 {
                  pp=MarketInfo(OrderSymbol(),MODE_BID);
                  if(pp-OrderOpenPrice()>=TrailingStart*po) 
                    {
                     if(OrderStopLoss()<pp-(TStop_Buy+TrailingStep-1)*po) 
                       {
                        ModifyOrder(-1,pp-TStop_Buy*po,-1);
                       }
                    }
                 }
               if(OrderType()==OP_SELL) 
                 {
                  pp=MarketInfo(OrderSymbol(),MODE_ASK);
                  if(OrderOpenPrice()-pp>=TrailingStart*po) 
                    {
                     if(OrderStopLoss()>pp+(TStop_Sell+TrailingStep-1)*po || OrderStopLoss()==0) 
                       {
                        ModifyOrder(-1,pp+TStop_Sell*po,-1);
                       }
                    }
                 }
              }
           }
        }
     }
  }
//+----------------------------------------------------------------------------+
 
lihn:

他们为什么要抹去伊戈尔-金的功能的作者呢!?因为对作者不敬,但有义务在发表时注明作者身份!"。

而你的问题最好是在作者的支部里解决!你可以在搜索或谷歌中找到它!

 

你能告诉我是否可以在MQL4中绘制多色指标?我在哪里可以得到一个例子?


MQL4文档包含INDICATOR_COLOR_INDEX,但完全没有涉及这个主题。我在MQL5中找到了一个例子 - https://www.mql5.com/ru/articles/135 。

它编译成功,但没有按预期工作。例子中使用的PlotIndexSetInteger函数 编译成功,尽管MQL4文档中没有提到它。


还有一个不一致的地方:MQL4文档在ArrayCopy函数的描述中包含一个类似的例子,该函数也使用PlotIndexSetInteger函数。


开发商是否迷失在自己的森林中,或者我错过了什么?

 
Dubovik:

你知道在MQL4中是否可以绘制不同颜色的指标?我在哪里可以找到一个例子?


MQL4文档包含INDICATOR_COLOR_INDEX,但完全没有涉及这个主题。我在MQL5中找到了一个例子 - https://www.mql5.com/ru/articles/135 。

它编译成功,但没有按预期工作。例子中使用的PlotIndexSetInteger函数编译成功,尽管MQL4文档中没有提到它。


还有一个差异:MQL4文档在ArrayCopy函数的描述中包含一个类似的例子,PlotIndexSetInteger函数也用在那里。


是开发商在自己的森林里迷失了方向,还是我不明白什么?

有多少种颜色就有多少个缓冲器,请在文档、代码库、文章和论坛中寻找它们而谷歌的救援!
 
borilunad:
有多少种颜色,就有多少个缓冲区,请在文档、代码库、文章和论坛中查看!而谷歌的救援!

我不是这个意思,我指的是像这样添加了缓冲区的指标。

 SetIndexBuffer(4,buffer_color_line,INDICATOR_COLOR_INDEX);
 
Dubovik:

我不是这个意思,我指的是像这样添加了缓冲区的指标。

这个参数在四倍体中不起作用。有多少个缓冲区,就有多少种颜色
 
这是在MCL4中吗?
 
是的,在MQL4中。文档中有些东西很粗略,实际上并不奏效。
 
Dubovik:
是的,在MQL4中。文档中有一些零碎的描述,但实际上并不奏效。
奇怪,通常情况下,把它放在文档中已经太晚了,但现在却反过来了!这就是为什么我们要把它放在文档中。因此,它将是!只有当?
原因: