Ayuda a la codificación - página 722

 
Tigra:


En este indicador, hay algunos problemas cuando se utilizan las cotizaciones de 4 dígitos. Pero no es crítico, el problema es la escala a 4 dígitos al nivel de 100, trató de mostrar las imágenes, mirando en el momento adecuado es muy forzar la vista (después de unos días, ya sea como un hilo para cambiar la escala al nivel de 40 - sería mejor ser visto histogramas y esquina derecha del texto que indicaría el valor actual?

Оставлю оригинальный текст на русском, тк возможны искажения при переводе(

У этого индикатора есть некоторые проблемы при использовании 4 значных котировок. Но это не критично, самая проблемы это масштабирование на 4 значном до уровня 100, постарался показать на картинках, разглядывать нужный момент весьма напрягает глаза( после нескольких дней, можно ли как нить поменять масштаб до уровня 40 - что бы лучше было видно гистограммы и в правом углу текстом что бы обозначалось текущее значение? Еще не могу понять почему появляються черные гистограммы поверх при увеличении (

¿No es ese el repintor?
 

Mladen,

Estoy trabajando con MT5.

Tengo esta " función trailing simple" que necesito convertir en "trailing con paso", ¿podría dar un consejo?

en el EA tengo
===================
entrada "Trailing" (por puntos)

=> ejemplo:
trailing: 4000 (4 puntos)
(método antiguo) si el precio se mueve 4 puntos mover stoploss 4 puntos

pero necesito modificar a

===================
input "Trailing (Distancia) en puntos"
input "Trailing (Paso) en puntos"

=> ejemplo:
distancia de arrastre: 4000 (4 puntos)
paso de arrastre : 1500 (1,5 puntos)

(nuevo método) si el precio se ha movido 4 puntos mover stoploss 1,5 puntos

//+------------------------------------------------------------------+
//| Simple Trailing function                                         |
//+------------------------------------------------------------------+
void fSimpleTrailing(){
   if(Trailing<=0){
      return;
   }        
   if(!Pos.Select(_Symbol)){
      return;
   }        
   if(!Sym.RefreshRates()){
      return;  
   }  
   double nsl,tmsl,psl;  
   switch(Pos.PositionType()){
      case POSITION_TYPE_BUY:
         nsl=Sym.NormalizePrice(Sym.Bid()-_Point*Trailing);
            if(nsl>=Sym.NormalizePrice(Pos.PriceOpen())){
               if(nsl>Sym.NormalizePrice(Pos.StopLoss())){
                  tmsl=Sym.NormalizePrice(Sym.Bid()-_Point*Sym.StopsLevel());
                     if(nsl<tmsl){
                        Trade.PositionModify(_Symbol,nsl,Pos.TakeProfit());
                     }
               }
            }
      break;
      case POSITION_TYPE_SELL:
         nsl=Sym.NormalizePrice(Sym.Ask()+_Point*Trailing);
            if(nsl<=Sym.NormalizePrice(Pos.PriceOpen())){
               psl=Sym.NormalizePrice(Pos.StopLoss());
                  if(nsl<psl || psl==0){
                     tmsl=Sym.NormalizePrice(Sym.Ask()+_Point*Sym.StopsLevel());
                        if(nsl>tmsl){
                           Trade.PositionModify(_Symbol,nsl,Pos.TakeProfit());
                        }
                  }
            }      
      break;
   }
}
 
nbtrading:
¿No es el repintor?

Sí, cuenta, pero el color no es importante en este indicador, para mí es muy bueno muestra a cabo.
 
baraozemo:

Mladen,

Estoy trabajando con MT5.

Tengo esta "función trailing simple" que necesito convertir en "trailing con paso", ¿podría dar un consejo?

en el EA tengo
===================
entrada "Trailing" (por puntos)

=> ejemplo:
trailing: 4000 (4 puntos)
(método antiguo) si el precio se mueve 4 puntos mover stoploss 4 puntos

pero necesito modificar a

===================
input "Trailing (Distancia) en puntos"
input "Trailing (Paso) en puntos"

=> ejemplo:
distancia de arrastre: 4000 (4 puntos)
paso de arrastre : 1500 (1,5 puntos)

(nuevo método) si el precio se ha movido 4 puntos mover stoploss 1,5 puntos

//+------------------------------------------------------------------+
//| Simple Trailing function                                         |
//+------------------------------------------------------------------+
void fSimpleTrailing(){
   if(Trailing<=0){
      return;
   }        
   if(!Pos.Select(_Symbol)){
      return;
   }        
   if(!Sym.RefreshRates()){
      return;  
   }  
   double nsl,tmsl,psl;  
   switch(Pos.PositionType()){
      case POSITION_TYPE_BUY:
         nsl=Sym.NormalizePrice(Sym.Bid()-_Point*Trailing);
            if(nsl>=Sym.NormalizePrice(Pos.PriceOpen())){
               if(nsl>Sym.NormalizePrice(Pos.StopLoss())){
                  tmsl=Sym.NormalizePrice(Sym.Bid()-_Point*Sym.StopsLevel());
                     if(nsl<tmsl){
                        Trade.PositionModify(_Symbol,nsl,Pos.TakeProfit());
                     }
               }
            }
      break;
      case POSITION_TYPE_SELL:
         nsl=Sym.NormalizePrice(Sym.Ask()+_Point*Trailing);
            if(nsl<=Sym.NormalizePrice(Pos.PriceOpen())){
               psl=Sym.NormalizePrice(Pos.StopLoss());
                  if(nsl<psl || psl==0){
                     tmsl=Sym.NormalizePrice(Sym.Ask()+_Point*Sym.StopsLevel());
                        if(nsl>tmsl){
                           Trade.PositionModify(_Symbol,nsl,Pos.TakeProfit());
                        }
                  }
            }      
      break;
   }
}
Si el precio se movió en comparación con : ¿qué?
 
mladen:
Si el precio se ha movido respecto a : ¿qué?

antes de llamar a la función tienes

si el precio está "creciendo", comprueba la "distancia" en puntos... si coincide con la "distancia" mueve el stoploss usando el paso (en puntos)

ejemplo:

stoploss =8000
distancia de arrastre = 4000
paso de arrastre = 2000

usted compra al precio 10000

ahora el precio es 14000 (distancia de arrastre objetivo alcanzado=4000) , ahora necesita mover el stoploss a 6000 (8000 - paso de arrastre)

ahora el precio es 18000 (objetivo de distancia de seguimiento alcanzado=4000 ), ahora necesita mover el stoploss a 2000 (6000 - paso de seguimiento)

ahora el precio es 22000 (objetivo de distancia de seguimiento alcanzado=4000), ahora necesita mover el stoploss a "entrada" + 2000 (2000 - paso de seguimiento =-2000)

ahora el precio es 24000 (objetivo de distancia alcanzado=4000), ahora necesita mover el stoploss a la "entrada" + 6000 (-2000 - paso de arrastre =-6000)

 
baraozemo:

antes de llamar a la función tienes

si el precio está "creciendo", comprueba la "distancia" en puntos... si coincide con la "distancia" mueve el stoploss usando el paso (en puntos)

ejemplo:

stoploss =8000
trailing distance = 4000
trailing step = 2000

usted compra al precio 10000

ahora el precio es 14000 (objetivo de distancia de seguimiento alcanzado=4000), ahora necesita mover el stoploss a 6000 (8000 - paso de seguimiento)

ahora el precio es 18000 (objetivo de distancia de seguimiento alcanzado=4000 ), ahora necesita mover el stoploss a 2000 (6000 - paso de seguimiento)

ahora el precio es 22000 (objetivo de distancia de seguimiento alcanzado=4000), ahora necesita mover el stoploss a la "entrada" + 2000 (2000 - paso de seguimiento =-2000)

ahora el precio es 24000 (objetivo de distancia de seguimiento alcanzado=4000), ahora necesita mover el stoploss a la "entrada" + 6000 (-2000 - paso de seguimiento =-6000)

Sí, pero si no lo tienes registrado (como suele ocurrir con los precios de stop loss o take profit: cuando se modifican empiezan a ser un criterio para otro cambio) te ves obligado a tenerlo en variables y eso es cualquier cosa menos a prueba de errores. Lo que intentas no es repetible por el código o tienes que codificar esos stops para todos y cada uno de los casos, lo que lo hace inutilizable para cualquier precio abierto que no sea exactamente el mismo que los precios codificados.
 

Hola,

Me gustaría escribir una función que dibuje una flecha. Me gustaría que la fl echa flotara. ¿Alguna idea? :)

void DrawArrow(string name, int IdSymbol, int x, int y, int width, int corner, color clr)
{
   ObjectCreate(0,name,OBJ_ARROW,0,0,0,0,0);
      ObjectSetInteger(0,name,OBJPROP_ARROWCODE,IdSymbol);
      ObjectSetInteger(0,name,OBJPROP_CORNER,corner);
      ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
      ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
      ObjectSetInteger(0, name, OBJPROP_COLOR, clr);
      ObjectSetInteger(0,name,OBJPROP_WIDTH,width);
      ChartRedraw(0);
}

 
mladen:
Sí, pero si no lo tienes registrado (como suele ocurrir con los precios de stop loss o take profit : cuando se modifican empiezan a ser un criterio para otro cambio) te ves obligado a tenerlo en variables y eso es cualquier cosa menos a prueba de errores. Lo que intentas no es repetible por el código o tienes que codificar esos stops para todos y cada uno de los casos, lo que lo hace inutilizable para cualquier precio de apertura que no sea exactamente el mismo que los precios codificados.

Hola mladen,

aquí tienes el ejemplo-ea

Archivos adjuntos:
sample-ea.mq5  36 kb
 
Tartut:

Hola,

Me gustaría escribir una función que dibuje una flecha. Me gustaría que la fl echa flotara. ¿Alguna idea? :)

void DrawArrow(string name, int IdSymbol, int x, int y, int width, int corner, color clr)
{
   ObjectCreate(0,name,OBJ_ARROW,0,0,0,0,0);
      ObjectSetInteger(0,name,OBJPROP_ARROWCODE,IdSymbol);
      ObjectSetInteger(0,name,OBJPROP_CORNER,corner);
      ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
      ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
      ObjectSetInteger(0, name, OBJPROP_COLOR, clr);
      ObjectSetInteger(0,name,OBJPROP_WIDTH,width);
      ChartRedraw(0);
}

¿Qué significa la flecha "flotante"?

PD: los objetos fl echa no están usando las coordenadas x e y ni la esquina. Están usando el tiempo y el precio

 

hola señor mladen

por favor, hazle un MTF

respecto a

Archivos adjuntos: