Ajuda na codificação - página 722

 
Tigra:


Neste indicador, há alguns problemas ao utilizar as citações de 4 dígitos. Mas não é crítico, o problema é a escala de 4 dígitos para o nível de 100, tentou mostrar as figuras, olhando para o momento certo está muito cansando seus olhos (depois de alguns dias, seja como um fio para mudar a escala para o nível de 40 - seria melhor ser visto histogramas e canto direito do texto que indicariam o valor atual?

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

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

Não é esse o repintor?
 

Mladen,

Estou trabalhando com o MT5.

Eu tenho esta " função de trilha simples" que eu preciso converter para "trilha com passo", você poderia dar uma dica?

na EA que eu tenho
===================
entrada "Trailing" (por pontos)

=> exemplo:
trailing: 4000 (4 pontos)
(método antigo) se o preço movesse 4 pontos movesse 4 pontos

mas preciso modificar para

===================
entrada "Trailing (Distância) em pontos
entrada "Trailing (Step) in points" (Etapa)

=> exemplo:
distância de fuga: 4000 (4 pontos)
etapa de fuga : 1500 (1,5 pontos)

(novo método) se o preço moveu 4 pontos moveu o stoploss 1,5 pontos

//+------------------------------------------------------------------+
//| 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:
Não é esse o repintor?

Sim, ele reconta, mas a cor não é importante neste indicador, para mim ela é muito boa para mostrar.
 
baraozemo:

Mladen,

Estou trabalhando com o MT5.

Eu tenho esta "função de trilha simples" que eu preciso converter para "trilha com passo", você poderia dar uma dica?

na EA que eu tenho
===================
entrada "Trailing" (por pontos)

=> exemplo:
trailing: 4000 (4 pontos)
(método antigo) se o preço movesse 4 pontos movesse 4 pontos

mas preciso modificar para

===================
entrada "Trailing (Distância) em pontos
entrada "Trailing (Step) in points" (Etapa)

=> exemplo:
distância de fuga: 4000 (4 pontos)
etapa de fuga : 1500 (1,5 pontos)

(novo método) se o preço moveu 4 pontos moveu o stoploss 1,5 pontos

//+------------------------------------------------------------------+
//| 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;
   }
}
Se o preço mudou em relação a : o quê?
 
mladen:
Se o preço mudou em relação a : o quê?

antes de chamar a função que você tem

se o preço está "crescendo" , você verifica a "distância" em pontos... se ela corresponde à "distância" você se move em stopploss usando o passo (em pontos)

exemplo:

stoploss =8000
distância de fuga = 4000
passo de fuga = 2000

você compra ao preço de 10.000

agora o preço é de 14000 (meta de distância de trilha alcançada=4000) , agora você precisa mover o stoploss para 6000 (8000 - etapa de trilha)

agora o preço é de 18000 (meta de distância de trilha alcançada=4000 ), agora você precisa mover o stoploss para 2000 (6000 - etapa de trilha)

agora o preço é 22000 (meta de distância de trilha alcançada=4000), agora você precisa mover o stoploss para "entrada" + 2000 (2000 - etapa de trilha =-2000)

agora o preço é 24000 (meta de distância de trilha alcançada=4000), agora você precisa mover o stoploss para "entrada" + 6000 (-2000 - etapa de trilha =-6000)

 
baraozemo:

antes de chamar a função que você tem

se o preço está "crescendo" , você verifica a "distância" em pontos... se ela corresponde à "distância" você se move em stopploss usando o passo (em pontos)

exemplo:

stoploss =8000
distância de trilha = 4000
etapa de trilha = 2000

você compra ao preço de 10.000

agora o preço é 14000 (meta de distância de fuga alcançada=4000), agora você precisa mover o stoploss para 6000 (8000 - etapa de fuga)

agora o preço é 18000 (meta de distância de fuga alcançada=4000 ), agora você precisa mover o stoploss para 2000 (6000 - etapa de fuga)

agora o preço é 22000 (meta de distância de fuga alcançada=4000), agora você precisa mover o stoploss para "entrada" + 2000 (2000 - etapa de fuga =-2000)

agora o preço é 24000 (meta de distância de trilha alcançada=4000), agora você precisa mover o stoploss para "entrada" + 6000 (-2000 - etapa de trilha =-6000)

Sim, mas se você não tem isso registrado (como geralmente é um caso com o stop loss ou tomar preços de lucro: quando eles são trocados começam a ser um critério para outra mudança) você é obrigado a ter isso em variáveis e isso é tudo menos à prova de erro. O que você está tentando não é repetível pelo código ou você tem que codificar em código duro esses stops para cada caso, o que o torna inutilizável para qualquer preço aberto que não seja exatamente o mesmo que os preços codificados em código duro.
 

Hi,

Eu gostaria de escrever uma função que desenha uma flecha. Eu gostaria que a flecha flutuasse. Alguma idéia? :)

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:
Sim, mas se você não tem isso registrado (como geralmente é um caso com o stop loss ou tomar preços de lucro: quando eles são trocados começam a ser um critério para outra mudança) você é obrigado a ter isso em variáveis e isso é tudo menos à prova de erro. O que você está tentando não é repetível pelo código ou você tem que codificar em código duro esses stops para cada caso, o que o torna inutilizável para qualquer preço aberto que não seja exatamente o mesmo que os preços codificados em código duro.

Oi mladen,

aqui está a amostra-ea

Arquivos anexados:
sample-ea.mq5  36 kb
 
Tartut:

Hi,

Eu gostaria de escrever uma função que desenha uma flecha. Eu gostaria que a flecha flutuasse. Alguma idéia? :)

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);
}

O que significa a flecha "flutuante"?

PS: os objetos de seta não estão usando as coordenadas x e y ou o canto. Eles estão usando o tempo e o preço

 

oi mr mladen

por favor, faça o MTF para ele

respeito

Arquivos anexados:
Razão: