Ajuda na codificação - página 743

 
mladen:
A análise do espectro singular (SSA) recalcula a menos que seja uma versão de ponto final. Como esse indicador usa SSA "regular", ele também recalcula
MUITO OBRIGADO
 
mladen:

Receio que pelo código eu não possa ver qual é a sua intenção

Se você está tentando ter médias com níveis, use a que eu afixei como um modelo

Hi,

sim vou usar sua ma avançada com níveis, (tem mais preços, etc... ma colorida, etc...)

mas tentei criar um por mim mesmo para entender como criar um indicador personalizado,

minha idéia é criar o mesmo componente (basicamente um MA com 2 níveis...)

Eu uso um MA central , e outros 2 MA plotados usando linhas de pontos para dar o mesmo efeito que os níveis...
para cada nível que eu preencho o buffer usando no cálculo do evento... como você me disse, mas algo está errado ;-(
os 2 MA que simulam o nível serão deslocados verticalmente... mas não está funcionando

 
baraozemo:

Hi,

sim vou usar sua ma avançada com níveis, (tem mais preços, etc... ma colorida, etc...)

mas tentei criar um por mim mesmo para entender como criar um indicador personalizado,

minha idéia é criar o mesmo componente (basicamente um MA com 2 níveis...)

Eu uso um MA central , e outros 2 MA plotados usando linhas de pontos para dar o mesmo efeito que os níveis...
para cada nível que eu preencho o buffer usando no cálculo do evento... como você me disse, mas algo está errado ;-(
os 2 MA que simulam o nível serão deslocados verticalmente... mas não está funcionando

Sim, isso é o que eu quis dizer

A coisa é tão simples quanto possível:

  • criar ma (média)
  • adicionar alguma diferença para cima e para baixo para o nível 1 (fazendo mais dois amortecedores)
  • adicionar alguma diferença para cima e para baixo para o nível 2 (fazendo mais dois amortecedores)

Não há necessidade de alterar nada no cálculo das médias ou qualquer outra coisa: apenas uma simples adição ou subtração do buffer central (ma)

 

double pipLevel1 = -10;
double pipLevel2 = 10;


//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,ExtLineBuffer,INDICATOR_DATA); //MA Buffer
   SetIndexBuffer(1,ExtLv1Buffer,INDICATOR_DATA); //MA lv1 Buffer
   SetIndexBuffer(2,ExtLv2Buffer,INDICATOR_DATA); //MA lv2 Buffer
//--- set accuracy
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits+1);
//--- sets first bar from what index will be drawn

   PlotIndexSetInteger(0,PLOT_LINE_STYLE,STYLE_SOLID); //MA Style
   PlotIndexSetInteger(1,PLOT_LINE_STYLE,STYLE_DOT);   //MA lvl1 Style
   PlotIndexSetInteger(2,PLOT_LINE_STYLE,STYLE_DOT);   //MA lvl2 Style

                                                       //IndicatorSetInteger(INDICATOR_LEVELS,1,InpLevel1); //MA lvl1 Value
//IndicatorSetInteger(INDICATOR_COLOR2,1,Cyan);
//IndicatorSetInteger(INDICATOR_STYLE2,1,STYLE_DOT);
//IndicatorSetInteger(INDICATOR_IDTH,1,1);

//IndicatorSetInteger(INDICATOR_LEVELS,2,InpLevel2); //MA lvl2 Value
//IndicatorSetInteger(INDICATOR_LEVELCOLOR,2,Cyan);
//IndicatorSetInteger(INDICATOR_LEVELSTYLE,2,STYLE_DOT);
//IndicatorSetInteger(INDICATOR_LEVELWIDTH,2,1);  

   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,InpMAPeriod); //MA
   PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,InpMAPeriod); //MA lvl1
   PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,InpMAPeriod); //MA lvl2
//---- line shifts when drawing

   PlotIndexSetInteger(0,PLOT_SHIFT,InpMAShift); //MA
   PlotIndexSetInteger(1,PLOT_SHIFT,InpMAShift); //MA lvl1
   PlotIndexSetInteger(2,PLOT_SHIFT,InpMAShift); //MA lvl2

//--- name for DataWindow
   string short_name="unknown ma";
   switch(InpMAMethod)
     {
      case MODE_EMA :  short_name="EMA";  break;
      case MODE_LWMA : short_name="LWMA"; break;
      case MODE_SMA :  short_name="SMA";  break;
      case MODE_SMMA : short_name="SMMA"; break;
     }
   IndicatorSetString(INDICATOR_SHORTNAME,short_name+"("+string(InpMAPeriod)+")");
//---- sets drawing line empty value--
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);  //MA
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0.0);  //MA lvl1
   PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,0.0);  //MA lvl2
//---- initialization done
  }
//+------------------------------------------------------------------+
//|  Moving Average                                                  |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {
   double pipMultiplier=_Point*MathPow(10,MathMod(_Digits,2));
   pipLevel1 = InpLevel1 * pipMultiplier;
   pipLevel2 = InpLevel2 * pipMultiplier;
//Print("point:"+_Point+" Digits:"+_Digits+ "pipMul:"+pipMultiplier);
//pipLevel1 = InpLevel1 / 10;
//pipLevel2 = InpLevel2 / 10;  

//--- check for bars count
   if(rates_total<InpMAPeriod-1+begin)
      return(0);// not enough bars for calculation
//--- first calculation or number of bars was changed
   if(prev_calculated==0)
     {
      ArrayInitialize(ExtLineBuffer,0);  //MA
      ArrayInitialize(ExtLv1Buffer,1);  //MA level1
      ArrayInitialize(ExtLv2Buffer,2);  //MA level2
     }
//--- sets first bar from what index will be draw
   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,InpMAPeriod-1+begin); //MA
   PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,InpMAPeriod-1+begin); //MA lvl1
   PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,InpMAPeriod-1+begin); //MA lvl2

//--- calculation
   switch(InpMAMethod)
     {
      case MODE_EMA:  
                      CalculateEMA(rates_total,prev_calculated,begin,price);
                      ExtLv1Buffer[rates_total-1]=price[rates_total-1]+pipLevel1;
                      ExtLv2Buffer[rates_total-1]=price[rates_total-1]+pipLevel2;
                      //Print ("rates_total:"+rates_total+" prev:"+prev_calculated+" begin:"+begin+" price:"+price[rates_total-1]);
                      break;
      case MODE_LWMA:
                      CalculateLWMA(rates_total,prev_calculated,begin,price);
                      ExtLv1Buffer[rates_total-1]=price[rates_total-1]+pipLevel1;
                      ExtLv2Buffer[rates_total-1]=price[rates_total-1]+pipLevel2;
                      break;
      case MODE_SMMA:
                      CalculateSmoothedMA(rates_total,prev_calculated,begin,price);
                      ExtLv1Buffer[rates_total-1]=price[rates_total-1]+pipLevel1;
                      ExtLv2Buffer[rates_total-1]=price[rates_total-1]+pipLevel2;
                      break;
      case MODE_SMA:  
                      CalculateSimpleMA(rates_total,prev_calculated,begin,price);
                      ExtLv1Buffer[rates_total-1]=price[rates_total-1]+pipLevel1;
                      ExtLv2Buffer[rates_total-1]=price[rates_total-1]+pipLevel2;
                      break;
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
mladen
:

Sim, isso é o que eu quis dizer

A coisa é tão simples quanto possível:

  • criar ma (média)
  • adicionar alguma diferença para cima e para baixo para o nível 1 (fazendo mais dois amortecedores)
  • adicionar alguma diferença para cima e para baixo para o nível 2 (fazendo mais dois amortecedores)

Não há necessidade de alterar nada no cálculo das médias ou qualquer outra coisa: apenas uma simples adição ou subtração do buffer central (ma)

você poderia mostrar um código de amostra para adicionar/subtrair (verticalmente) a ma? Eu tentei, mas meu código falhou...

 
baraozemo:

você poderia mostrar um código de amostra para adicionar/subtrair (verticalmente) a ma? Eu tentei, mas meu código falhou...

Você tem isso na versão que eu publiquei. Por favor, verifique novamente o código
 
mladen:
Esse indicador utiliza TMA centralizado - ele recalcula. Os alertas seriam inúteis.

ok o que dizer da seta quando a cor muda

 
dotmund:

ok o que dizer da seta quando a cor muda

Os sinais (setas) seriam inúteis devido a sua natureza de recalculo/pintura
 
mladen:
Os sinais (setas) seriam inúteis devido à sua natureza de recálculo/pintura.

Prezado @mladen,

Um especialista que não tem suporte Ecn pode ser usado com um corretor do tipo Ecn sem problemas?

Em alguns especialistas existem opções para corretores do tipo Ecn.

Isto me levou a pensar que poderia ser melhor otimizar ou adicionar alguns códigos para os corretores do tipo Ecn.

 
oguz:

Prezado @mladen,

Um especialista que não tenha suporte Ecn pode ser usado com um corretor do tipo Ecn sem problemas?

Em alguns especialistas existem opções para corretores do tipo Ecn.

Isto me levou a pensar que poderia ser melhor otimizar ou adicionar alguns códigos para os corretores do tipo Ecn.

Sim, se você não usar o stop loss e não tiver lucro ao abrir pedidos.

Se for feito para o ecn/stp do outro lado, ele trabalhará em qualquer corretor sem nenhum problema. A única diferença é no momento da abertura das ordens - nenhuma outra mudança (ou otimização) é necessária

 
oguz:

Obrigado por sua resposta detalhada.

Tanto quanto sei, a ea anexada não tem suporte de corretagem do tipo Ecn.

Quero usar esta ea em corretores do tipo Ecn usando SL e TP.

Ficarei muito feliz se você fornecer suporte de corretores do tipo Ecn.

Essa ea precisaria de uma reescrita para que todos o entendessem.

Mas como eu não falo a língua usada nela, não posso ajudar. Desculpe