[ARCHIVIO] Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 3. - pagina 368

 

Buon pomeriggio!

Ho un compito, sembra facile a prima vista, ma non funziona. C'è una matrice in cui i valori sono sempre in una riga (in alcuni casi i valori possono andare in ordine crescente, in altri casi - in ordine decrescente). C'è un po' di livello (rosso nella foto). Devi trovare i due valori della matrice che sono più vicini al livello della linea rossa. Nella figura a) questi saranno valori di matrice con indici 0 e 1. Nella figura b) questi saranno valori di matrice con indici 2 e 1. Nelle figure c) e f) questi saranno valori di matrice con indici 0 e 0. Nelle figure d) ed e) questi saranno valori di matrice con indici 2 e 2.

Per favore, ditemi come risolvere questo problema. Grazie in anticipo.

 
Roman.:

Allora non ti preoccupare - sposta semplicemente il codice dell'indicatore nell'Expert Advisor come è per soddisfare i criteri di trading e questo è tutto - poi nel tabellone usando queste condizioni di trading trasferite da questo indicatore apri posizioni attraverso l'Expert Advisor e questo è tutto...
Grazie, ci sto lavorando :)
 
skyjet:
Grazie, lo sto risolvendo :)

Non c'è di che... Tutti ci sono passati. :-)
 
drknn:

Oggi è sabato - giorno di riposo. Si avvia l'EA, avviene l'inizializzazione, ma dato che è giorno di riposo e non ci sono tick, la funzione di avvio non viene avviata (cioè Trade() non viene chiamata). Per controllare se funziona correttamente, dovete inserire la chiamata di questa funzione nel blocco di inizializzazione, o testarla nel tester.

Dopo aver sostituito questa funzione in Init() e aver aggiunto il codice di controllo Print(DayOfWeek()) si è scoperto che l'ora veniva presa dal server, e l'ora del server era venerdì...

Sostituito

if(DayOfWeek()==0 || DayOfWeek()==6)

a

  if(TimeDayOfWeek(TimeLocal())==0 || TimeDayOfWeek(TimeLocal())==6)

e ha funzionato come previsto.

Grazie.

 

Ciao, compagni!

Ha affrontato un problema inaspettato.

L'altro ieri il tester funzionava come dovrebbe. Da ieri sera, qualsiasi versione della strategia nel tester apre un trade e dopo un secondo, o qualche minuto/ora di storia, il tester smette di funzionare. Nessun errore, niente.

Qualcuno ha qualche problema? Si prega di consigliare

 

Salve.

Per favore aiutatemi a trovare l'errore.

Qui sotto c'è la sezione problematica nella sua interezza, estratta dall'EA.

extern int      MAGIC= 1; 

int start()
  {
//----
  int tt = 0;
  double SchBuyLots     = SchBuyLots_b(MAGIC);
  double SchSellLots    = SchSellLots_b(MAGIC);
  double SchBuyLots100  = SchBuyLots100_b();
  double SchSellLots100 = SchSellLots100_b();
  double SchBuyLimitLots    = SchBuyLimitLots_b(MAGIC);
  double SchSellLimitLots   = SchSellLimitLots_b(MAGIC);
  double SchBuyStopLots100  = SchBuyStopLots100_b();
  double SchSellStopLots100 = SchSellStopLots100_b();

  double dy=0;
  double dx=SchBuyLots+SchBuyLots100-SchSellLots-SchSellLots100;
  if (dx!=0) dy=MathAbs(dx);

  double zx=SchBuyLimitLots-SchSellLimitLots;

  if (dx>0 && dy+zx!=SchSellStopLots100)tt=1; else tt=2;
 
  Alert (dy+zx,"---",SchSellStopLots100,"---",tt);
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
// ----------------- SchBuyLots() ---------------------------------------------
//  Функция возвращает суммарный лот Бай-ордеров для Магика
//----------------------------------------------------------------
double SchBuyLots_b(int MAGIC) {
  double SchBuyLots=0;
  int i;
  string SMB=Symbol();
  for (i=OrdersTotal()-1;i>=0;i--) {//Начало цикла
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {}
    else{//начало работы с выбранным ордером
      if(OrderSymbol()== SMB && OrderMagicNumber()== MAGIC){ 
      if(OrderType()==OP_BUY) {
        SchBuyLots=SchBuyLots+OrderLots();
       }
      }
    }//конец работы с выбранным ордером
  }//Конец цикла
  return(SchBuyLots);
}
// ----------------------------------------------------------------------------

// ----------------- SchSellLots() ---------------------------------------------
//  Функция возвращает суммарный лот Сейл-ордеров для Магика
//-----------------------------------------------------------------
double SchSellLots_b(int MAGIC) {
  double SchSellLots=0;
  int i;
  string SMB=Symbol();
  for (i=OrdersTotal()-1;i>=0;i--) {//Начало цикла
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {}
    else{//начало работы с выбранным ордером
      if(OrderSymbol()== SMB && OrderMagicNumber()== MAGIC) {
      if(OrderType()==OP_SELL) {
        SchSellLots=SchSellLots+OrderLots();
       }  
      }  
    }//конец работы с выбранным ордером
  }//Конец цикла
  return(SchSellLots);
}
// -------------------------------------------------------------------------------

// ----------------- SchBuyLots100() ---------------------------------------------
//  Функция возвращает суммарный лот Бай-ордеров для Магика 100
//--------------------------------------------------------------------------------
double SchBuyLots100_b() {
  double SchBuyLots100=0;
  int i;
  string SMB=Symbol();
  for (i=OrdersTotal()-1;i>=0;i--) {//Начало цикла
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {}
    else{//начало работы с выбранным ордером
      if(OrderSymbol()== SMB && OrderMagicNumber()==100) {
      if(OrderType()==OP_BUY) {
        SchBuyLots100=SchBuyLots100+OrderLots();
       }
      }
    }//конец работы с выбранным ордером
  }//Конец цикла
  return(SchBuyLots100);
}
// --------------------------------------------------------------------------------

// ----------------- SchSellLots100() ---------------------------------------------
//  Функция возвращает суммарный лот Сейл-ордеров для Магика 100
//---------------------------------------------------------------------------------
double SchSellLots100_b() {
  double SchSellLots100=0;
  int i;
  string SMB=Symbol();
  for (i=OrdersTotal()-1;i>=0;i--) {//Начало цикла
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {}
    else{//начало работы с выбранным ордером
      if(OrderSymbol()== SMB && OrderMagicNumber()==100) {
      if(OrderType()==OP_SELL) {
        SchSellLots100=SchSellLots100+OrderLots();
       }  
      }  
    }//конец работы с выбранным ордером
  }//Конец цикла
  return(SchSellLots100);
}
// ----------------------------------------------------------------------------
// ----------------- SchBuyLimitLots() ------------------------------------------
//  Функция возвращает суммарный лот BuyLimit-ордеров для Магика
//------------------------------------------------------------------------------
double SchBuyLimitLots_b(int MAGIC) {
  double SchBuyLimitLots=0;
  int i;
  string SMB=Symbol();
  for (i=OrdersTotal()-1;i>=0;i--) {//Начало цикла
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {}
    else{//начало работы с выбранным ордером
      if(OrderSymbol()== SMB && OrderMagicNumber()== MAGIC){ 
      if(OrderType()==OP_BUYLIMIT) {
        SchBuyLimitLots=SchBuyLimitLots+OrderLots();
       }
      }
    }//конец работы с выбранным ордером
  }//Конец цикла
  return(SchBuyLimitLots);
}
// ----------------------------------------------------------------------------

// ----------------- SchSellLimitLots() ----------------------------------------
//  Функция возвращает суммарный лот SellLimit-ордеров для Магика
//-----------------------------------------------------------------------------
double SchSellLimitLots_b(int MAGIC) {
  double SchSellLimitLots=0;
  int i;
  string SMB=Symbol();
  for (i=OrdersTotal()-1;i>=0;i--) {//Начало цикла
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {}
    else{//начало работы с выбранным ордером
      if(OrderSymbol()== SMB && OrderMagicNumber()== MAGIC) {
      if(OrderType()==OP_SELLLIMIT) {
        SchSellLimitLots=SchSellLimitLots+OrderLots();
       }  
      }  
    }//конец работы с выбранным ордером
  }//Конец цикла
  return(SchSellLimitLots);
}
// -------------------------------------------------------------------------------
// ----------------- SchBuyStopLots100() -----------------------------------------
//  Функция возвращает суммарный лот BuyStop-ордеров для Магика 100
//--------------------------------------------------------------------------------
double SchBuyStopLots100_b() {
  double SchBuyStopLots100=0;
  int i;
  string SMB=Symbol();
  for (i=OrdersTotal()-1;i>=0;i--) {//Начало цикла
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {}
    else{//начало работы с выбранным ордером
      if(OrderSymbol()== SMB && OrderMagicNumber()==100) {
      if(OrderType()==OP_BUYSTOP) {
        SchBuyStopLots100=SchBuyStopLots100+OrderLots();
       }
      }
    }//конец работы с выбранным ордером
  }//Конец цикла
  return(SchBuyStopLots100);
}
// --------------------------------------------------------------------------------

// ----------------- SchSellStopLots100() -----------------------------------------
//  Функция возвращает суммарный лот SellStop-ордеров для Магика 100
//---------------------------------------------------------------------------------
double SchSellStopLots100_b() {
  double SchSellStopLots100=0;
  int i;
  string SMB=Symbol();
  for (i=OrdersTotal()-1;i>=0;i--) {//Начало цикла
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {}
    else{//начало работы с выбранным ордером
      if(OrderSymbol()== SMB && OrderMagicNumber()==100) {
      if(OrderType()==OP_SELLSTOP) {
        SchSellStopLots100=SchSellStopLots100+OrderLots();
       }  
      }  
    }//конец работы с выбранным ордером
  }//Конец цикла
  return(SchSellStopLots100);
}
// --------------------------------------------------------------------------------

Si prega di prestare attenzione alla linea (quasi all'inizio):

 if (dx>0 && dy+zx!=SchSellStopLots100)tt=1; else tt=2;

Per qualche ragione, quando i valori dy+zx e SchSellStopLots100 sono uguali separatamente (ho controllato con allerts) in questa espressione non sono più uguali tra loro, e la variabile tt prende il valore 1 invece di 2.

Vi chiedo di aiutarmi a trovare il difetto.

Grazie in anticipo.

 
Le condizioni di trading del server sono cambiate durante il fine settimana... Dovresti fare dei test su un terminale separato non collegato a un broker/rete, usando un'utility speciale per impostare il giusto spread. Meglio cercare articoli sui test degli EA e su come farlo correttamente.
 
nemo811:

(controllato con allerts)

È meglio controllare tramite ND o differenza modulo meno di un certo delta.
 
splxgf:
Meglio controllare tramite ND o differenze modulo meno di qualche delta.

Per qualche ragione, sommando dy e zx si ottiene un numero 0,3 (nel mio particolare test della situazione attuale del mercato) quando rispetto a questo numero non è uguale. Cioè, aggiungo dy+zx e ottengo 0,3. Confronto dy+zx con 0,3 - non sono uguali.

Confrontando dy e zx con i numeri che restituiscono - le uguaglianze funzionano come dovrebbero.

Indovinello.

Per favore, aiutatemi.

 
ramirez17:

Ciao, compagni!

Ha affrontato un problema inaspettato.

L'altro ieri il tester funzionava come dovrebbe. Da ieri sera, qualsiasi versione della strategia nel tester apre un trade e dopo un secondo, o qualche minuto/ora di storia, il tester smette di funzionare. Nessun errore, niente.

Qualcuno ha qualche problema? Si prega di consigliare

Il tester ha un caricatore. Tutto è scritto lì. Non ci sono telepati qui per leggere i log del tuo tester a distanza.