[AVISO FECHADO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Não posso ir a lugar algum sem você. - página 797

 

Companheiros camaradas! Esta é minha tentativa #2 de criar uma ferramenta milagrosa que lê ROC AUDUSD e GBPUSD para negociar em GBPAUD!) É um pouco primitivo, mas eu realmente queria experimentar!!! Quando eu o corro no equipamento de teste sem otimizá-lo, ele congela, mas continua carregando com sucesso... e no final - nem uma única profissão. Bem claramente eu estraguei tudo, mas onde, plz, diga-me, pessoas conhecedoras!!! :)) Este é um código EA. ENTRE os dados de um ROC personalizado normal

//+------------------------------------------------------------------+
//|                                                    Robot_Rocky_Rich |
//|                                                          JonsonAlla |
//|                                                    deep_ampik@bk.ru |
//+------------------------------------------------------------------+

extern double TakeProfit = 700;
extern double Sl = 200;
extern double Lots = 0.01;
             
//+------------------------------------------------------------------+
int start()
 {
  int cnt, ticket;
  double x1= iCustom("AUDUSD",PERIOD_H1,"ROC",12,1,0);
  double x2= iCustom("GBPUSD",PERIOD_H1,"ROC",12,1,0); 
  
  
     
  /**total=OrdersTotal();
  if(total<1)//проверка количества ордеров 
   {
   if(AccountFreeMargin()<(1000*Lots))
    {
     Print("Недостаточно средств = ", AccountFreeMargin());
     return(0);  
    }**/
  if (x1<x2)
   {
    ticket=OrderSend("GBPAUD",OP_BUY,Lots,Ask,30,Bid-Sl*Point,Ask+TakeProfit*Point,"-",0,0,Green);
    if(ticket>0)
     {
      if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("открыта позиция BUY : ",OrderOpenPrice());
     }
    else Print("Ошибка при открытии BUY позиции : ",GetLastError());          
    return(0);
   }
  if (x1>x2) 
   {
    ticket=OrderSend("GBPAUD",OP_SELL,Lots,Bid,30,Ask+Sl*Point,Bid-TakeProfit*Point,"-",0,0,Red);
    if(ticket>0)
     {
      if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("открыта позиция SELL : ",OrderOpenPrice());
     }
    else Print("Ошибка при открытии SELL позиции : ",GetLastError());
    return(0); 
   }
   return(0);
  }
  
 
Vinin:

IndicatorCounted() não funciona em EAs. É destinado apenas a indicadores. Talvez devêssemos ampliar um pouco o problema. Há diferentes maneiras de resolvê-lo. O mais fácil é otimizar o indicador (mas nem sempre possível), você pode transferir os cálculos para o Expert Advisor, mas novamente nem sempre possível. Você realmente tem que olhar para o indicador

Quero transferir o código de cálculo para um EA, em um indicador o código de cálculo começa com um loop...como posso substituí-lo por um mais correto7

int CountedBars=IndicatorCounted();
if(CountedBars< 0) CountedBars= 0;
if(CountedBars> 0) CountedBars--;
cnt = Bars - CountedBars;

for(int i = 0; i < cnt ;i++)
 
obla4ko:

Companheiros camaradas! Esta é minha tentativa #2 de criar uma ferramenta milagrosa que lê ROC AUDUSD e GBPUSD para negociar em GBPAUD!) É um pouco primitivo, mas eu realmente queria experimentar!!! Quando eu o corro no equipamento de teste sem otimizá-lo, ele congela, mas continua carregando com sucesso... e no final - nem uma única profissão. Bem claramente eu estraguei tudo, mas onde, plz, diga-me, pessoas conhecedoras!!! :)) Este é um código do chamado Expert Advisor, que retira dados do ROC personalizado habitual.


Tente com o controle de carga do histórico primitivo

Arquivos anexados:
 
Vinin:


Tente com o controle primitivo da carga histórica

Talvez não seja correto apenas comparar x1 e x2, mas deve ser anexado a algo, digamos, à última barra... Por lógica indicadora, a EA deve abrir pelo menos uma posição e não fechá-la, pois o fechamento não é implementado no programa :)), e ROC de uma moeda é sempre maior que ROC da outra ...

 

Talvez a chamada indicadora não esteja muito certa. Eu mesmo terei que procurá-lo. Parece que o tampão deveria ser zero, não primeiro.

 

Eu não tenho tal indicador

 
T-G:

Quero transferir o código de cálculo para o Expert Advisor, o código de cálculo começa com um loop...como posso substituí-lo por um mais correto7

1. Por que?????????????????????

Mas, se você realmente precisar, então

2. Por que diabos eu não estou respondendo a nada? Eu lhe disse - há um artigo da Kositsyn sobre isso nos artigos (está bem aqui, link acima). Quantas vezes devo repeti-lo para você? Talvez você tenha algo mais a fazer?

 
Vinin:

Eu não tenho tal indicador

Aqui está o código para o indicador ROC

//+------------------------------------------------------------------+
//|                                                          ROC.mq4 |
//|                                    Copyright © 2006, Robert Hill |
//+------------------------------------------------------------------+

#property  copyright "Copyright © 2006, Robert Hill"
//---- indicator settings
#property  indicator_separate_window
#property  indicator_buffers 1
#property  indicator_color1  Red
//---- indicator parameters
extern int RPeriod = 12;
extern bool UsePercent = true;
//---- indicator buffers
double RateOfChange[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- drawing settings
   SetIndexStyle(0, DRAW_LINE);
   SetIndexDrawBegin(0, RPeriod);
   IndicatorDigits(Digits + 1);
//---- indicator buffers mapping
   if(!SetIndexBuffer(0, RateOfChange))
       Print("cannot set indicator buffers!");
//---- name for DataWindow and indicator subwindow label
   IndicatorShortName("ROC(" + RPeriod + ")");
//---- initialization done
   return(0);
  }
//+------------------------------------------------------------------+
//| Moving Averages Convergence/Divergence                           |
//+------------------------------------------------------------------+
int start()
  {
   int limit;
   double ROC, CurrentClose, PrevClose;
   int counted_bars = IndicatorCounted();
//---- check for possible errors
   if(counted_bars < 0) 
       return(-1);
//---- last counted bar will be recounted
   if(counted_bars > 0) 
       counted_bars--;
   limit = Bars - counted_bars - RPeriod;
//---- ROC calculation
   for(int i = 0; i < limit; i++)
     {
       CurrentClose = iClose(NULL, 0, i);
       PrevClose = iClose(NULL, 0, i + RPeriod);
       ROC = CurrentClose - PrevClose;
       //----
       if(UsePercent)
         {
           if(PrevClose != 0)
               RateOfChange[i] = 100 * ROC / PrevClose;
         }
       else
           RateOfChange[i] = ROC;
     }   
//---- done
   return(0);
  }
//+------------------------------------------------------------------+
 

"Ninguém precisa esfregar o chão? Eu irei lavá-los! " (с)

Aqui está a transferência do código indicador para o código Expert.

 
obla4ko:

Aqui está o código para o indicador ROC


Há um erro no código indicador.
Razão: