Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 681

 
Igor Makanu:

probablemente así, para vender:

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

comprar por Bid, es decir, ( Bid -OrderOpenPrice())

TakeProfit =100 puntos Lote = 0,1, ¿cuál será el beneficio de la posición abierta en la divisa, cuando se cierre la posición por TP?

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

no funciona así.

 
Vitaly Muzichenko:

Necesidad de operar:Lote -> Dinero -> Distancia, y el coste de la garrapata

El dinero es justo lo que hay que averiguar )

 
Vitaly Muzichenko:

La solución no tiene en cuenta las comisiones y los swaps. Los puntos parecen estar en beneficio, pero los costes son una pérdida.

No me gusta la fórmula OrderProfit()+ OrderComission()+OrderSwap() con comisiones y swaps

La ayuda dice que la comisión puede ser en puntos o en moneda de depósito, esta fórmula no tiene en cuenta esto, y puede hacer más daño que bien en las pruebas, pero esto es una cuestión de gusto

Ghabo:

Take_Profit =100 puntos, lote =0,1, ¿cuál será el beneficio de una posición abierta en la divisa, cuando la posición se cierre por TP?

No funciona así.

¿Las matemáticas no son lo tuyo? ;)

de lo contrario:

profit=NormalizeDouble((Take_Profit *Punto)*MarketInfo(_Symbol,MODE_TICKVALUE)*lote/Punto,2);

si se acorta, será

profit=NormalizeDouble(lote *TakeProfit*MarketInfo(_Symbol,MODE_TICKVALUE),2);

 
Vitaly Muzichenko:

Lo que se quiere decir aquí es queOrderProfit() debe utilizarse en el cálculo

¿Cómo calcular el lote de una posición antes de enviar una orden para obtener un beneficio de 20 USD cuando se active el TakeProfit? El OrderProfit() no ayudará aquí - no hay posición todavía.

O en otras palabras: ¿Cuál sería el takeprofit de la posición futura, de manera que si abro con 0,1 lote obtendría un beneficio de 20 USD? Y aquí OrderProfit() no ayudará - por la misma razón.

Y de otra manera: ¿Qué Stop Loss debe haber en la posición futura, para que al abrir con 0,1 lote tenga una pérdida de no más del 3% de los fondos disponibles? Y aquí OrderProfit() no ayudará - por la misma razón.

Actualización: todos los cálculos serán aproximados sin conocer la comisión y el canje. Tendremos que ajustar las órdenes de parada "sobre la marcha" si necesitamos una precisión de un céntimo o un punto.

 
Artyom Trishkin:

Antes de enviar una orden para abrir una posición, ¿cómo puedo calcular el lote para la posición futura, de modo que cuando se active el takeprofit, obtenga un beneficio de 20 USD? OrderProfit() no es útil aquí - no hay posición todavía.

O en otras palabras: ¿Cuál sería el takeprofit de la posición futura, de manera que si abro con 0,1 lote obtendría un beneficio de 20 USD? Y aquí OrderProfit() no ayudará - por la misma razón.

Acabo de escribir y entender lo que tenía que calcular antes de abrir y borrar inmediatamente el mensaje. Qué inteligente eres al responder)

Una vez escribí tal, e introduje una cantidad por 1 lote en los parámetros de entrada como comisión.

 
Hola, no puedo entenderlo, por favor ayuda. ¿Qué ocurre con este código? ¿Muestro el valor medio en el comentario y aumenta con cada tic? Ayuda:-))))
 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:
¿aumenta con cada tic? Ayuda:-))))

significa que estás contando con cada tick el código que presentaste y no inicializando las variablesSredRazmax ySredRazmin

es un buen hábito inicializar las variables antes de usarlas - eso es lo que te enseñan las universidades, reduce el tiempo que se tarda en encontrar errores ;)

 

Colegas, ¿por qué este código se niega a ejecutarse en el probador de estrategias, pero se ejecuta correctamente en tiempo real? Me refiero específicamente a la función OnChartEvent(). En el modo de visualización en el probador, no se ejecuta cuando se pulsan los botones.

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:

Colegas, ¿por qué este código se niega a ejecutarse en el probador de estrategias, pero se ejecuta correctamente en tiempo real? Me refiero específicamente a la función OnChartEvent(). En el modo de visualización en el probador, no se ejecuta cuando se pulsan los botones.

Porque OnChartEvent() no funciona en el probador en MT4. Compruebe la bandera del estado del botón en el probador.
 
Artyom Trishkin:
Porque en MT4 OnChartEvent() no funciona en el probador. Compruebe la bandera del estado del botón en el probador.

Gracias. Tenía esa sospecha, pero no encontré información en la ayuda de que OnChartEvent() no funciona en el probador.