[Arquivo!] Escrever um assessor de graça - página 11

 
skylord писал(а) >>

Olá.

Comecei agora a aprender MQL, estou tentando escrever um EA...

Estou tentando escrever um EA baseado no indicador sidus v.2, quero que ele abra uma posição na direção que especifiquei pelo EA, somente quando nascer uma nova barra, ou seja, no primeiro tique ele deve verificar se o sinal está na barra anterior, e que tipo de ordem - com uma parada e um take. Anexar arquivo indicador.

Eu não tenho sorte em encontrar este sinal((.

Ajudar, ou pelo menos me dizer como fazer ...

Um Consultor Especialista em Indicadores Sidus

talvez isto o ajude ou a busca ajude!

ou segundo vento!

 

Obrigado vvavva. Tenho uma boa idéia, mas ela pula e faz muitos sinais à esquerda, mas não é o que eu preciso (

Como posso perguntar a alguém como solicitar o estado do tampão indicador na barra anterior da EA?

if (sigCurrent===1 && sigPrevious====2)
{
ExtMapBuffer4[i-1] = High[i-1]-5*Point;
//ExtMapBuffer3[i] = Ask;
entry=true;
entry_point=Ask;
}
else if (sigCurrent===2 && sigPrevious===1)
{
ExtMapBuffer3[i-1] = Low[i-1]-5*Point;
//ExtMapBuffer4[i] = Bid;
entry=true;
entry_point=Bid;

}
Uma EA precisa de uma condição correspondente como esta

double Up;
double Down;
int res;

Up=iCustom(NULL, 0, "sidus_v.2", 3, 1);
Down=iCustom(NULL,0, "sidus_v.2",2,1);
//
condições de venda
if(Down===Low) {
res=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"",MAGICMA,0,Red);
return;
}
///
condições de compra
if(Up===High)
{
res=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,",MAGICMA,0,Blue);
return; }

Mas é errado!!!

Favor aconselhar como lidar com este caso...

 

Olá.

Estou negociando silenciosamente, estou usando 4 induks, linhas de apoio à resistência, tendências, blá, blá, blá, blá... Eu quebrei meus olhos na tela, você pode me ajudar a inserir o sinal sonoro nas setas (comprar, vender) e as mesmas setas na história com uma linha pontilhada (recortada pela mesma)

Arquivos anexados:
zigandzag.mq4  16 kb
 
skylord писал(а) >>

Olá.

Comecei agora a aprender MQL, estou tentando escrever um EA...

Estou tentando escrever um EA baseado no indicador sidus v.2, quero que ele abra uma posição na direção que especifiquei pelo EA, somente quando nascer uma nova barra, ou seja, no primeiro tique ele deve verificar se há um sinal na barra anterior, e que tipo de sinal. Anexar arquivo indicador.

Eu não tenho sorte em ler este sinal((.

Ajudar, ou pelo menos me dizer como fazer ...

Olá, acabei de correr o código com meus olhos, desculpe-me, sou um lamer terrível, posso estar errado, é claro, mas será que o indicador está com os olhos em demasia? Vamos apenas tentar pensar logicamente

for(int i=0; i<limit; i++)
   {

contar de zero a todas as barras da história, aumentar o contador.

ExtMapBuffer1[ i]=iMA(NULL,0, FastEMA,0,MODE_EMA,PRICE_CLOSE, i);
     ExtMapBuffer2[ i]=iMA(NULL,0, SlowEMA,0,MODE_EMA,PRICE_CLOSE, i);
     rsi_sig = iRSI(NULL, 0, RSIPeriod, PRICE_CLOSE, i);

tudo está claro aqui.

pipdiffCurrent=(ExtMapBuffer1[i]-ExtMapBuffer2[i]);

que se foda o macdak.

if ( pipdiffCurrent>0 && rsi_sig>50) 
     {
       sigCurrent = 1;  //Up
     }
     else if ( pipdiffCurrent<0 && rsi_sig<50)
     {
       sigCurrent = 2;  //Down

Se macdac for maior que zero e RSI for maior que 50, o sinal é 1, e se for menor, é 2

Até agora, tudo bem.

if (sigCurrent==1 && sigPrevious==2)
     {

aqui eu não entendo... se ambos macdak é positivo e RSI é maior que 50 e macdak é negativo e RSI é menor que 50... já que há uma condição no código abaixo

sigPrevious=sigCurrent;

então podemos equacioná-los...

e roubar o futuro é uma má idéia...

ExtMapBuffer3[i-1]

Não, vamos substituí-lo por este, ou melhor, modificá-lo completamente, já que já conhecemos a lógica:

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red
#property indicator_width1 1
#property indicator_width2 1
//----
extern int       FastEMA=14;
extern int       SlowEMA=21;
extern int       RSIPeriod=17;
//----
double BuyBuffer[], SellBuffer[];
int pre_signal = 0;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
     
//----
      SetIndexBuffer(0, BuyBuffer);
      SetIndexLabel(0, "Buy");
      SetIndexStyle(0, DRAW_ARROW, STYLE_SOLID, 1);
      SetIndexArrow(0, 241);
//----
      SetIndexBuffer(1, SellBuffer);
      SetIndexLabel(1, "Sell");
      SetIndexStyle(1, DRAW_ARROW, STYLE_SOLID, 1);
      SetIndexArrow(1, 242);
//----
      return(0);
  }

int deinit()
  {
      
  }

int start()
  {
  

      int counted_bars = IndicatorCounted();

      
   int limit = Bars - 17;

   if( counted_bars > 17) 
     { 
       limit = Bars - counted_bars; 
     }

      for(int i = limit; i >= 0; i --)
        {
             BuyBuffer[ i] = EMPTY_VALUE;
             SellBuffer[ i] = EMPTY_VALUE;      
             
                
                 double a = iMA(NULL,0, FastEMA,0,MODE_EMA,PRICE_CLOSE, i+1);
                 double s = iMA(NULL,0, SlowEMA,0,MODE_EMA,PRICE_CLOSE, i+1);
                 
                
                
                 double a1 = iMA(NULL,0, FastEMA,0,MODE_EMA,PRICE_CLOSE, i);
                 double s1 = iMA(NULL,0, SlowEMA,0,MODE_EMA,PRICE_CLOSE, i);
                 double d1 = iRSI(NULL, 0, RSIPeriod, PRICE_CLOSE, i)-50;
             //----
           if( a< s && a1> s1 && d1>0)
               {
                    BuyBuffer[ i] = Low[ i] - iATR(NULL, 0, 14, i);
                    
               }
             if( a> s && a1< s1 && d1<0)
               {
                    SellBuffer[ i] = High[ i] + iATR(NULL, 0, 14, i);         
                    
               }
        
      
        }
      return(0);
  }

Agora veja, é uma imagem triste. Compare-a:

Embora eu possa estar enganado, é claro, e o indicador não desenha novamente, mas me perdoe, e talvez você possa usar o preço de abertura (especialmente no RSI), mas não o de fechamento, para que o sinal apareça na barra, onde deveria =(

 

Obrigado pela preocupação vtoroe_dyxanie )))) Eu não escrevi o indicador, ele não o redesenha de acordo com minhas observações. Eu o uso desde o primeiro tique da próxima barra quando já está trancado. É por isso que eu preciso saber o que estava na barra anterior no primeiro tique. E por que ela rouba o futuro? Parece-me que em um determinado tick, se houver tal correspondência, ele atribui um à sigCurrent e no final da variável sigPreviamente, atribui a mesma sigCurrent:

sigPrevious=sigCurrent;

e depois no próximo tick se a sigCurrent já for 2 e a variável sigPrevious preencher naturalmente o buffer com 1:

if (sigCurrent==1 && sigPrevious==2)
{
ExtMapBuffer4[i-1] = High[i-1]-5*Point;
//ExtMapBuffer3[i] = Ask;
entry=true;
entry_point=Ask;
}

E quanto a isto:

ExtMapBuffer3[i-1]

Eu mesmo não entendo bem...

Mas parece funcionar bem, setas desenham na barra em que o sinal aparece!

Mas quando eu removi -1, muitas surpresas apareceram(



 
skylord >> :

Obrigado pela preocupação vtoroe_dyxanie )))) Eu não escrevi o indicador, ele não o redesenha de acordo com minhas observações. Eu o uso desde o primeiro tique da próxima barra quando já está trancado. É por isso que eu preciso saber o que estava na barra anterior no primeiro tique. E por que ela rouba o futuro? Parece-me que em um determinado tick, se houver tal correspondência, ele atribui um à sigCurrent e no final da variável sigPreviamente, atribui a mesma sigCurrent:

sigPrevious=sigCurrent;

e depois no próximo tick se a sigCurrent já for 2 e a variável sigPrevious preencher naturalmente o buffer com 1:

if (sigCurrent==1 && sigPrevious==2)
{
ExtMapBuffer4[i-1] = High[i-1]-5*Point;
//ExtMapBuffer3[i] = Ask;
entry=true;
entry_point=Ask;
}

E quanto a isto:

ExtMapBuffer3[i-1]

Eu mesmo não entendo bem...

Mas parece funcionar bem, setas desenham na barra em que o sinal aparece!

Mas quando eu removi -1, houve muitas surpresas(
.



Mas isso tem mais um efeito colateral. Às vezes, quando as condições são cumpridas, ele dá um sinal, mas não desenha flechas. Mas quando eu voltar a colocá-lo em um gráfico, todas as setas voltarão ao seu lugar. Há alguma maneira de compilá-lo em um gráfico novamente ou atualizar seus amortecedores novamente?

 
skylord писал(а) >>

Por que ele rouba o futuro? Parece atribuir uma à sigCurrent em um determinado tick se houver tal correspondência, e atribui a mesma sigCurrent à variável sigPrevious no final:

sigPrevious=sigCurrent;

e depois no próximo tick se a sigCurrent já for 2 e a variável sigPrevious preencher naturalmente o buffer com 1:

if (sigCurrent==1 && sigPrevious==2)
{
ExtMapBuffer4[i-1] = High[i-1]-5*Point;
//ExtMapBuffer3[i] = Ask;
entry=true;
entry_point=Ask;
}



Seu verdadeiro e desatento...

Sobre: "Uso-o desde o primeiro tique da próxima barra quando já está fixado. É por isso que eu preciso saber no primeiro tique o que estava no bar anterior. "E eu realmente me pergunto se não podemos usar

duplo iCustom( .... int shift)

a ajuda onisciente diz que

turno - Índice do valor obtido do buffer de indicadores (deslocamento relativo à barra atual pelo número especificado de períodos de retorno).

Eu me pergunto se você pode escrever desta forma (eu mesmo me perguntei)

para (i=0; i<limite;i++){

if (iCustom(NULL, 0, "sidus_v.2", 3, i+1)<0 && iCustom(NULL, 0, "sidus_v.2", 3, i)>0)

....

porque os usuários do fórum ooooopsie Wise dificilmente condescenderão a dois nubis, deixados para melhorar minhas habilidades por conta própria, pois isso pode vir a ser útil.

 
vtoroe_dyxanie писал(а) >>

É verdade, estou desatento...

Sobre: "Eu o uso desde o primeiro tique da próxima barra quando já está trancado. É por isso que eu preciso saber no primeiro tique o que estava no bar anterior. "E eu realmente me pergunto se você não pode usar

duplo iCustom( .... int shift)

a ajuda onisciente diz que

turno - Índice do valor obtido do buffer de indicadores (deslocamento relativo à barra atual pelo número especificado de períodos de retorno).

Eu me pergunto se você pode escrever desta forma (eu mesmo me perguntei)

para (i=0; i<limite;i++){

if (iCustom(NULL, 0, "sidus_v.2", 3, 1)<0 && iCustom(NULL, 0, "sidus_v.2", 3, 0)>0)

....

Como os participantes do fórum oooooooovery Wise provavelmente não condescenderão com os dois nubis, deixados para melhorar suas habilidades por conta própria, pois isso pode vir a ser útil.

Não pode não =(

Besteira, então como resolver este problema? Bem, como você já mencionou: https://www.mql5.com/ru/forum/117268 vamos ficar de olho nisso =)

 
vtoroe_dyxanie писал(а) >>

Não pode fazer =(

Cara, então como você resolve essa questão? Bem, já que você já começou um fio condutor: "Como descobrir a direção de uma EA" vamos ficar de olho nela =)

>> Vou fazer um rastreamento para a empresa!?)

 
vtoroe_dyxanie писал(а) >>

Não pode fazer =(

Cara, então como você resolve essa questão? Bem, já que você já começou uma linha: "Como saber a direção de uma EA" vamos ficar de olho =)

>> ei! lembre-se que eu lhe pedi ajuda? se não for muito difícil, pode me dizer mais? o que você fez por mim foi o que eu escrevi agora (eu queria que o indicador mostrasse os prazos mais próximos em uma janela) isto é o que????

Arquivos anexados:
test1.mq4  6 kb
Razão: