Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 236

 
Yaroslav Nykula:

... todos os pares de moedas onde o USD está presente ...

Presumo que haja um cálculo no código da margem utilizada dos fundos de negociação - tente abrir uma conta em uma moeda diferente de USD e veja se o teste passa.
 
<br / translate="no">

Vou assumir que há um cálculo da margem utilizada dos fundos de negociação no código - tente abrir uma conta em algo que não seja USD e veja se o teste passa.



Não há cálculo de"margem utilizada dos fundos de comércio" no código ... e ao final do meu primeiro posto notei"mudar a visão da moeda de depósito no testador não resolve o problema".

 
Yaroslav Nykula:

Não há cálculo de"margem utilizada dos fundos de comércio" no código ... e ao final do meu primeiro posto notei"a troca do tipo de moeda de depósito no testador não resolve o problema".

Então meus poderes telepáticos estão terminados - estabeleça o código.

 

Desculpe a pergunta, sei como inserir um indicador externo em um EA usando um buffer... Mas não há tampão neste indicador, como obter o preço superior e inferior.




//+------------------------------------------------------------------+

//|                                                trendlinesDay.mq4 |

//|                      Copyright © 2008, MetaQuotes Software Corp. |

//|                                        https://www.metaquotes.net |

//+------------------------------------------------------------------+

#property copyright "nsi2000"

#property link      "http://www.expert-mt4.nm.ru"

//----

#property indicator_chart_window

//---- input parameters

extern int nPeriod=10;

extern int Limit=350;

   double Up[];

   double Dn[];

///---- int Widners Oscilator

int cnt,nCurBar=0;

//+------------------------------------------------------------------+

//| Custom indicator initialization function                         |

//+------------------------------------------------------------------+

int init()

  {      

//---- Output in Char

   for(cnt=0; cnt<=5; cnt++)

     {

      ObjectCreate("WSO-"+cnt,OBJ_HLINE,0,0,0);

      ObjectSet("WSO-"+cnt,OBJPROP_COLOR,Red);

      if(cnt<5)

        {

         ObjectCreate("Trend DN-"+cnt,OBJ_TREND,0,0,0,0,0);

         ObjectSet("Trend DN-"+cnt,OBJPROP_COLOR,Magenta);

        }

      //----

      ObjectCreate("WRO-"+cnt,OBJ_HLINE,0,0,0);

      ObjectSet("WRO-"+cnt,OBJPROP_COLOR,Blue);

      if(cnt<5)

        {

         ObjectCreate("Trend UP-"+cnt,OBJ_TREND,0,0,0,0,0);

         ObjectSet("Trend Up-"+cnt,OBJPROP_COLOR,Aqua);

        }

     }

//----

   return(0);

  }

//+------------------------------------------------------------------+

//| Custor indicator deinitialization function                       |

//+------------------------------------------------------------------+

int deinit()

  {

//---- TODO: add your code here

   for(cnt=0; cnt<=5; cnt++)

     {

      ObjectDelete("Trend UP-"+cnt);

      ObjectDelete("Trend DN-"+cnt);

      ObjectDelete("WSO-"+cnt);

      ObjectDelete("WRO-"+cnt);

     }

//----

   return(0);

  }

//+------------------------------------------------------------------+

//| Custom indicator iteration function                              |

//+------------------------------------------------------------------+

int start()

  {

//---- TODO: add your code here


   double r1,r2,r3,r4,r5,r6;

   int rt1,rt2,rt3,rt4,rt5,rt6;

   double s1,s2,s3,s4,s5,s6;

   int st1,st2,st3,st4,st5,st6;


//---- Линии сопротивления и поддержки

   if(Bars<Limit) Limit=Bars-nPeriod;

   for(nCurBar=Limit; nCurBar>0; nCurBar--)

     {

      if(Low[nCurBar+(nPeriod-1)/2]==Low[Lowest(NULL,0,MODE_LOW,nPeriod,nCurBar)])

        {

         s6=s5; s5=s4; s4=s3; s3=s2; s2=s1; s1=Low[nCurBar+(nPeriod-1)/2];

         st6=st5; st5=st4; st4=st3; st3=st2; st2=st1; st1=nCurBar+(nPeriod-1)/2;

        }

      if(High[nCurBar+(nPeriod-1)/2]==High[Highest(NULL,0,MODE_HIGH,nPeriod,nCurBar)])

        {

         r6=r5; r5=r4; r4=r3; r3=r2; r2=r1; r1=High[nCurBar+(nPeriod-1)/2];

         rt6=rt5; rt5=rt4; rt4=rt3; rt3=rt2; rt2=rt1; rt1=nCurBar+(nPeriod-1)/2;

        }

     }

//---- Move Object in Chart


   ObjectMove("Trend DN-0",1,Time[st1],s1);

   ObjectMove("Trend DN-0",0,Time[st2],s2);


//----

   ObjectMove("Trend UP-0",1,Time[rt1],r1);

   ObjectMove("Trend UP-0",0,Time[rt2],r2);

//----

   return(0);

  }

//+------------------------------------------------------------------+


 
Vyacheslav Kornev:

Desculpe a pergunta, sei como inserir um indicador externo em um EA usando um buffer... Neste indicador não há tampão, como obter o preço superior e inferior


Pegue objetos gráficos no gráfico com nomes "Trend DN-0", "Trend UP-0". (aquelas linhas que indicam alguns níveis do indicador) e ler os dados desejados a partir delas

 
Maxim Kuznetsov:

no gráfico, tomar objetos gráficos com os nomes "Trend DN-0", "Trend UP-0". (aquelas linhas com as quais o indicador marca alguns níveis) e ler os dados necessários a partir delas


por favor, escreva como fazer isso no próprio indicador? e depois faça 2 buffers desses valores para usá-los na EA?

Escreva em que lugar tomar o preço?

 
Vyacheslav Kornev:

por favor, escreva como fazer isso no próprio indicador? e depois faça 2 buffers desses valores para usá-los na EA?

escrever em que lugar tomar o preço?

O indicador já tem todos os dados para calcular dois amortecedores e extraí-los.

E você não sugeriu mudar o indicador, mas ler os dados das linhas traçadas pelo indicador do Consultor Especialista.
Entretanto, isto impõe restrições ao uso do testador - somente no modo visual você poderá testar o Expert Advisor.

 
Artyom Trishkin:

O indicador já tem todos os dados para calcular os dois amortecedores e desenhá-los.

E não lhe foi sugerido alterar o indicador, mas ler os dados das linhas traçadas pelo indicador do Consultor Especialista.
Entretanto, isto impõe limitações ao uso do testador - você só poderá testar o Expert Advisor em modo visual.


Isso significa que eu deveria escrever no indicador

#property indicator_buffers 2

BufferUp duplo[], BufferDn[];


int OnInit()

{

SetIndexBuffer(0, BufferUp)

SetIndexBuffer(1, BufferDn)

}



E depois especificamente com o quê? Tenho que ligar estes 2 amortecedores?

 
Vyacheslav Kornev:

Portanto, tenho que escrever no indicador

#property indicator_buffers 2

BufferUp duplo[], BufferDn[];


int OnInit()

{

SetIndexBuffer(0, BufferUp)

SetIndexBuffer(1, BufferDn)

}



E então exatamente com o quê? Tenho que ligar estes 2 amortecedores?

Veja: você tem linhas movendo-se em seu código:

ObjectMove("Trend DN-0",1,Time[st1],s1);
ObjectMove("Trend DN-0",0,Time[st2],s2);
//----
ObjectMove("Trend UP-0",1,Time[rt1],r1);
ObjectMove("Trend UP-0",0,Time[rt2],r2);

Tempo[st1], Tempo[st2] e o preço destes pontos de referência s1, s2 são para uma linha,
Tempo[rt1], Tempo[rt2], r1, r2 - para outra linha.

Usando a equação de linha você pode calcular o valor do buffer para cada barra entre estes pontos e escrever este valor no buffer.

 
Artyom Trishkin:

Veja: você tem linhas movendo-se em seu código:

Temos Tempo[st1], Tempo[st2] e o preço destes pontos s1, s2 - para uma linha,
Tempo[rt1], Tempo[rt2], r1, r2 - para outra linha.

Usando a equação de linha você pode calcular o valor do buffer para cada barra entre estes pontos e escrever este valor no buffer.


por isso não se pode simplesmente tomar o preço da linha sobre o bar. Não sei como calcular a equação da linha reta, se possível, escrever como tudo deve ficar.

E, em geral, o valor não deve ser tomado entre pontos, mas acima de 0 ou 1 barra

Razão: