Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 800

 

¿Sería correcto transferir los beneficios de los cajeros?

(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:

¿Por qué han borrado al autor de las funciones de Igor Kim? Por faltar al respeto al autor, ¡pero es obligatorio publicar con la indicación de la autoría!

¡Y es mejor dirigir su pregunta al autor en su rama! ¡Puedes encontrarlo en una búsqueda o en google!

 

¿Pueden decirme si es posible dibujar indicadores multicolores en MQL4? ¿Dónde puedo conseguir un ejemplo?


La documentación de MQL4 contiene INDICATOR_COLOR_INDEX, pero el tema no está cubierto en absoluto. He encontrado un ejemplo en MQL5 - https://www.mql5.com/ru/articles/135 .

Se compila con éxito, pero no funciona como se pretende. La función PlotIndexSetInteger utilizada en el ejemplo compiló con éxito, aunque no se menciona en la documentación de MQL4.


Hay una inconsistencia más: el documento MQL4 contiene un ejemplo similar en la descripción de la función ArrayCopy que también utiliza la función PlotIndexSetInteger.


¿Están los desarrolladores perdidos en su propio bosque, o qué me estoy perdiendo?

 
Dubovik:

¿Sabes si es posible dibujar indicadores de diferentes colores en MQL4? ¿Dónde puedo encontrar un ejemplo?


La documentación de MQL4 contiene INDICATOR_COLOR_INDEX, pero el tema no está cubierto en absoluto. He encontrado un ejemplo en MQL5 - https://www.mql5.com/ru/articles/135 .

Se compila con éxito, pero no funciona como se pretende. La función PlotIndexSetInteger utilizada en el ejemplo compiló con éxito, aunque no se menciona en la documentación de MQL4.


Hay una discrepancia más: el doc MQL4 contiene un ejemplo similar en la descripción de la función ArrayCopy y la función PlotIndexSetInteger se utiliza allí también.


¿Están los desarrolladores perdidos en su propio bosque, o no entiendo algo?

Hay tantos colores como búferes, búsquelos en la documentación, la base de código, los artículos y el foro. ¡Y Google al rescate!
 
borilunad:
Tantos colores, tantos topes, ¡mira en la Documentación, la Codebase, los Artículos y el Foro! ¡Y Google al rescate!

No me refiero a eso, me refiero a los indicadores que tienen un buffer añadido como este:

 SetIndexBuffer(4,buffer_color_line,INDICATOR_COLOR_INDEX);
 
Dubovik:

No me refiero a eso, me refiero a los indicadores que tienen un buffer añadido como este:

Este parámetro no funciona en el cuádruple. Tantos topes, tantos colores
 
¡¿Está en mcl4?!
 
Sí, en MQL4. Hay algo en la documentación que es impreciso y no funciona realmente.
 
Dubovik:
Sí, en MQL4. Hay algo en la documentación que se describe a trozos, pero que en realidad no funciona.
Es extraño, normalmente es demasiado tarde para ponerlo en el documento, pero ahora es al revés. Así será. ¡¿Sólo cuando?!