Eu nunca estudei programação, mas quero escrever um EA - página 8

 

Então, o que está acontecendo, colegas programadores?
sou o autor desta linha e continuo pedindo conselhos.


assim na estrutura declarada no cabeçalho

e aqui está a parte interessante: O QUE É ISTO?
Eu defini uma condição no OnTick que se não houver ordens em aberto
então:
se um balanço rápido for maior que um balanço lento,
então: abra um pedido.



pergunta. por que uma ordem abre em cada carrapato?

 
Sergey Lobzankin:

Então, o que há, colegas programadores?
Sou o autor desta linha e continuo pedindo conselhos.


Assim, declarei a estrutura no cabeçalho

e aqui está o interessante, O QUE É ISTO?
Eu defini uma condição no OnTick que se não houver ordens em aberto
então:
se um balanço rápido for maior que um balanço lento,
então: abra um pedido.



pergunta. por que uma ordem abre em cada carrapato?

Isso significa que em cada carrapato a condição é cumprida.

Se a condição deveria ser uma passagem de MA, então na primeira barra era < menos e na barra zero tornou-se > mais. Mas em seu estado na barra zero > mais e na primeira barra > mais.

 

https://code.org/

https://scratch.mit.edu/

Se você quer aprender programação (é realmente um estilo de pensamento, não uma linguagem) em MQL - isso é um verdadeiro aborrecimento para você e seu ambiente.

Clique nos links - tudo é simples, a nível escolar (até mesmo elementar em alguns lugares), mas pelo menos alguma introdução aos algoritmos e escrevendo-os. Caso contrário, toda vez que você espirrar, entrará em contato com o fórum e aguardará uma resposta, o que é uma perda de tempo, e tempo é dinheiro.

PS/ e aconselho a todos a lerem-no, o scratch é uma obra-prima por dentro - o avô da programação moderna.

Code.org: Любой может научиться
Code.org: Любой может научиться
  • code.org
Каждый студент в каждой школе заслуживает возможность изучения компьютерных наук.
 
Sergey Lobzankin:

Então, o que há, colegas programadores?
Eu sou o autor do tema e continuo a pedir conselhos.


assim, no cabeçalho anunciou a estrutura

e eis o que é interessante, O QUE É ISTO?
Eu defini uma condição no OnTick que se não houver ordens em aberto
então:
se um balanço rápido for maior que um balanço lento,
então: abra um pedido



pergunta. por que uma ordem abre em cada carrapato?

Então, camarada autor do tema?

Eu lhe disse há um mês, e você nem está prestando atenção:

Este é o fórum para negociação, sistemas automatizados de negociação e teste de estratégias comerciais.

Nunca estudei programação, mas quero escrever um Expert Advisor.

Alexey Volchanskiy, 2018.04.10 17:47

Há um botão "Código", à esquerda do botão com as letras Aa. Se você não souber como utilizá-lo, poderá utilizá-lo, por exemplo, para afixar seu próprio código ).


Este é um fórum para comércio, sistemas automatizados de comércio e testes estratégicos.

Nunca estudei programação, mas quero escrever um Expert Advisor.

Konstantin Nikitin, 2018.04.10 21:18

Bem, você não tem nada super natural lá. Portanto, a melhor opção. Coloque-o aqui, mas somente através de

Alguém irá sugerir algo útil.


E você ainda está inserindo código com uma imagem.

 
Olá, encontrei o seguinte problema. A EA necessita de dados médios móveis sobre zero e a primeira barra para analisar a situação e para cálculos posteriores.
A função OnCalculate foi basicamente inventada para escrever um indicador. Eu separei esta função em minha EA, mas não consigo descobrir como acessá-la a partir do OnTick.
 
Sergey Lobzankin:
Olá, encontrei um problema desse tipo. O Expert Advisor precisa de dados médios móveis sobre zero e a primeira barra para analisar a situação e para cálculos posteriores.
A função OnCalculate foi basicamente inventada para escrever um indicador. Em minha EA, fiz esta função separadamente, mas não posso dar uma idéia de como acessá-la a partir do OnTick

Você não precisa nem mesmo tentar levar a OnCalculate de um indicador para uma EA! Basta aplicar ao indicador no EA (usando o cabo do indicador) e obter os dados.

Exemplo de trabalho com iMA e iStdDev em códigoiMA iStdDev- código extraído da OnTick, obtendo dados de indicadores iMA

   double ma_fast[],ma_normal[],stddev[];
   MqlRates rates[];
   ArraySetAsSeries(ma_fast,true);
   ArraySetAsSeries(ma_normal,true);
   ArraySetAsSeries(stddev,true);
   ArraySetAsSeries(rates,true);
   int buffer=0,start_pos=0,count=3;
   if(!iGetArray(handle_iMA_Fast,buffer,start_pos,count,ma_fast) || 
      !iGetArray(handle_iMA_Normal,buffer,start_pos,count,ma_normal) || 
      !iGetArray(handle_iStdDev,buffer,start_pos,count,stddev) || 
      CopyRates(m_symbol.Name(),Period(),start_pos,count,rates)!=count)
     {
      PrevBars=0;
      return;
     }
//---
   if(ma_fast[0]>ma_normal[0])
      if(rates[1].close>rates[1].open)
         if(rates[1].close>ma_normal[0])
            if(stddev[0]>stddev[1])
               m_need_open_buy=true;
   if(ma_fast[0]<ma_normal[0])
      if(rates[1].close<rates[1].open)
         if(rates[1].close<ma_normal[0])
            if(stddev[0]>stddev[1])
               m_need_open_sell=true;
 
Vladimir Karputov:

Você não precisa nem mesmo tentar levar a OnCalculate do indicador para a EA! Basta aplicar para o indicador no Expert Advisor (usando o cabo indicador) e obter os dados.

Exemplo de trabalho com iMA e iStdDev em códigoiMA iStdDev- extrato de código da OnTick, obtendo dados de indicadores iMA

eu suspeito que você está certo))))
agora vou tentar brincar com arrays via ...Array...

 

E aqui está a outra coisa...
Eu tenho as alças bem no chapéu do especialista

extern int    zazor      = 0;
extern double Lots       = 0.1;
extern int    TrailingStop = 15;
extern int    TrailingStep = 2;
extern int    Magic      = 123;
extern int    Slippage   = 5;
int Digits;

int timeprev=0;

int    ticket;
double price,TP,SL,lastlot;
string;

int ima1_handle          = iMA (Symbol(),0,14,0,MODE_EMA,PRICE_CLOSE);               //хендл
int ima2_handle          = iMA (Symbol(),0,64,0,MODE_EMA,PRICE_CLOSE);               //хендл
int Stoch_handle         = iStochastic (Symbol(),0,20,15,15,MODE_EMA,STO_CLOSECLOSE);//хендл
int ATR_handle           = iATR        (Symbol(),0,21);                              //хендл
double ima1_massiv [2];                                                              //статический массив для быстрой машки 

e nos fóruns, quem o faz... Todos o fazem de forma diferente... Alguns no oninit, outros no ontik,
A questão é que em meu layout, eu copio dados em uma matriz e obtenho o número de elementos a serem copiados

void OnTick()
  { 
    int ima_count1 = CopyBuffer(ima1_handle,0,1,2,ima1_massiv);    //скопировал данные из 2х буферов быстрой машки
    string str_ima1 = IntegerToString(ima_count1);                 //отладочная
    printf("мой первый хендл = "  + str_ima1);                     //отладочная
   }
P.S., a propósito, o testador viu todos os indicadores cujas alças estão no cabeçalho do Expert Advisor e desenhou tudo no gráfico do visualizador
 

aqui está um artigo que explica claramente como implementar o acesso aos dados indicadores
https://www.mql5.com/ru/articles/43

Mas caras, os dados são copiados em um array, sem dúvida, mas preciso obter números específicos, ou seja, se a onda na última marca da barra atual for 1,32456, então preciso obter este número no log (para ter certeza de que o número seja realmente obtido), preciso tirar esta informação específica no tipo duplo,

para calcular o número de pontos do tipo int entre duas máscaras diferentes. como obter este valor?


Способы вызова индикаторов в MQL5
Способы вызова индикаторов в MQL5
  • www.mql5.com
В MQL5 существует несколько вариантов вызова индикаторов, и осуществляются они в основном при помощи функций IndicatorCreate() и iCustom(). Причем эти функции лишь возвращают хендл индикатора, и дальнейшая работа с индикаторами ведется именно через него. Так что же такое хендл? Как работать с функциями IndicatorCreate() и iCustom()? И как...
 
Sergey Lobzankin:

Aqui está um artigo que explica claramente como implementar o acesso aos dados indicadores
https://www.mql5.com/ru/articles/43

Mas caras, os dados são copiados em um array, sem dúvida, mas preciso obter números específicos, ou seja, se a onda na última marca da barra atual for 1.32456, preciso obter este número no log (para ter certeza de que o número seja realmente obtido), preciso tirar esta informação específica no tipo duplo,

para calcular o número de pontos int entre dois mash-ups diferentes. como você obtém esse valor?


Você olha e lê ao menos o que lhe dizem? Dei-lhe um exemplo no post. É apenas a obtenção de dados de dois iMAs:

   double ma_fast[],ma_normal[],stddev[];
   MqlRates rates[];
   ArraySetAsSeries(ma_fast,true);
   ArraySetAsSeries(ma_normal,true);
   ArraySetAsSeries(stddev,true);
   ArraySetAsSeries(rates,true);
   int buffer=0,start_pos=0,count=3;
   if(!iGetArray(handle_iMA_Fast,buffer,start_pos,count,ma_fast) || 
      !iGetArray(handle_iMA_Normal,buffer,start_pos,count,ma_normal) || 
      !iGetArray(handle_iStdDev,buffer,start_pos,count,stddev) || 
      CopyRates(m_symbol.Name(),Period(),start_pos,count,rates)!=count)
     {
      PrevBars=0;
      return;
     }
//---
   if(ma_fast[0]>ma_normal[0])
      if(rates[1].close>rates[1].open)
         if(rates[1].close>ma_normal[0])
            if(stddev[0]>stddev[1])
               m_need_open_buy=true;
   if(ma_fast[0]<ma_normal[0])
      if(rates[1].close<rates[1].open)
         if(rates[1].close<ma_normal[0])
            if(stddev[0]>stddev[1])
               m_need_open_sell=true;

Existem dois indicadores iMA - "Rápido" e "Normal". Os dados desses dois indicadores são obtidos em arraysma_fast ema_normal, respectivamente. Solicitamos acontagem de #start_pos do bar.

E então acessamos os dados obtidos (neste exemplo, acessamos os dados na barra nº 0)