[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 797

 

Compagni compagni! Questo è il mio tentativo #2 di creare uno strumento miracoloso che legge ROC AUDUSD e GBPUSD per fare trading su GBPAUD)! È un po' primitivo, ma volevo davvero provarlo!!! Quando lo eseguo nel tester senza ottimizzarlo, si blocca, ma continua a caricare con successo... e alla fine - non un solo scambio. Beh, chiaramente ho fatto un casino, ma dove, plz, ditemelo, persone competenti!!! :)) Questo è un codice EA che prende i dati da un normale ROC personalizzato.

//+------------------------------------------------------------------+
//|                                                    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() non funziona negli EA. È destinato solo agli indicatori. Forse dovremmo allargare un po' il problema. Ci sono diversi modi di risolverlo. La più semplice è ottimizzare l'indicatore (ma non sempre è possibile), si possono trasferire i calcoli all'Expert Advisor, ma di nuovo non sempre è possibile. Bisogna effettivamente guardare l'indicatore

Voglio trasferire il codice di calcolo in un EA, in un indicatore il codice di calcolo inizia con un ciclo...come posso sostituirlo con uno più corretto7

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

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

Compagni compagni! Questo è il mio tentativo #2 di creare uno strumento miracoloso che legge ROC AUDUSD e GBPUSD per fare trading su GBPAUD)! È un po' primitivo, ma volevo davvero provarlo!!! Quando lo eseguo nel tester senza ottimizzarlo, si blocca, ma continua a caricare con successo... e alla fine - non un solo scambio. Beh, chiaramente ho fatto un casino, ma dove, plz, ditemelo, persone competenti!!! :)) Questo è il codice del cosiddetto Expert Advisor, prende i dati dal solito ROC personalizzato.


Prova con il controllo primitivo del caricamento della storia

File:
 
Vinin:


Prova con il controllo primitivo del caricamento della storia

Forse non è corretto confrontare solo x1 e x2, ma dovrebbe essere collegato a qualcosa, per esempio, all'ultima barra? Per la logica dell'indicatore, l'EA dovrebbe aprire almeno una posizione e non chiuderla, perché la chiusura non è implementata nel programma :)), e il ROC di una valuta è sempre maggiore del ROC dell'altra ...

 

Forse il richiamo dell'indicatore non è del tutto corretto. Dovrò cercarlo io stesso. Sembra solo che il buffer dovrebbe essere zero, non primo.

 

Non ho un tale indicatore

 
T-G:

Voglio trasferire il codice di calcolo all'Expert Advisor, il codice di calcolo inizia con un ciclo... come posso sostituirlo con uno più corretto7

1. Perché?????????????????????

Ma, se ne avete davvero bisogno, allora

2. Perché cazzo non rispondo a niente? Te l'ho detto - c'è un articolo di Kositsyn su questo negli articoli (è proprio qui, link sopra). Quante volte te lo devo ripetere? Forse hai qualcos'altro da fare?

 
Vinin:

Non ho un tale indicatore

Ecco il codice per l'indicatore 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);
  }
//+------------------------------------------------------------------+
 

"Nessuno ha bisogno di lavare i pavimenti? Verrò a lavarli! " (с)

Ecco il trasferimento del codice dell'indicatore al codice Expert.

 
obla4ko:

Ecco il codice per l'indicatore ROC


C'è un errore nel codice dell'indicatore.
Motivazione: