[ARCHIV] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 3. - Seite 368

 

Guten Tag!

Ich habe eine Aufgabe, die auf den ersten Blick einfach erscheint, aber sie funktioniert nicht. Es gibt ein Array, in dem die Werte immer in einer Reihe stehen (in einigen Fällen können die Werte in aufsteigender Reihenfolge, in anderen Fällen in absteigender Reihenfolge stehen). Es gibt eine Ebene (rot im Bild). Sie müssen die beiden Array-Werte finden, die dem Niveau der roten Linie am nächsten sind. In Abbildung a) sind dies Arraywerte mit den Indizes 0 und 1. In Abbildung b) sind dies Arraywerte mit den Indizes 2 und 1. In den Abbildungen c) und f) sind dies Arraywerte mit den Indizes 0 und 0. In den Abbildungen d) und e) sind dies Arraywerte mit den Indizes 2 und 2.

Bitte sagen Sie mir, wie ich dieses Problem lösen kann. Ich danke Ihnen im Voraus.

 
Roman.:

Dann machen Sie sich nicht die Mühe - verschieben Sie einfach den Code des Indikators in den Expert Advisor, so wie er ist, um die Handelskriterien zu erfüllen, und das war's - dann öffnen Sie im Board mit diesen übertragenen Handelsbedingungen aus diesem Indikator Positionen über den Expert Advisor und das war's...
Danke, ich arbeite daran :)
 
skyjet:
Danke, ich kümmere mich darum :)

Bitte sehr... Jeder hat das schon einmal erlebt. :-)
 
drknn:

Heute ist Samstag - freier Tag. Sie starten den EA, die Initialisierung findet statt, aber da es ein freier Tag ist und es keinen Tick gibt, wird die Startfunktion nicht gestartet (d.h. Trade() wird nicht aufgerufen.). Um zu überprüfen, ob sie korrekt funktioniert, müssen Sie den Aufruf dieser Funktion in den Initialisierungsblock einfügen oder im Tester testen.

Nach dem Ersetzen dieser Funktion in Init() und dem Hinzufügen des Prüfcodes Print(DayOfWeek()) stellte sich heraus, dass die Zeit vom Server übernommen wurde und die Zeit des Servers Freitag war...

Ersetzt

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

zu

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

und es hat wie vorgesehen funktioniert.

Ich danke Ihnen.

 

Hallo, liebe Genossen!

Er stand vor einem unerwarteten Problem.

Vorgestern funktionierte das Testgerät wie gewünscht. Seit gestern Abend öffnet jede Version der Strategie im Tester einen Handel und nach einer Sekunde oder ein paar Minuten/Stunden der Geschichte, hört der Tester auf zu funktionieren. Keine Fehler, nichts.

Hat irgendjemand ein Problem damit? Bitte beraten

 

Hallo.

Bitte helfen Sie mir, den Fehler zu finden.

Im Folgenden wird der gesamte problematische Abschnitt aus dem Umweltbericht wiedergegeben.

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);
}
// --------------------------------------------------------------------------------

Achten Sie bitte auf die Zeile (fast ganz am Anfang):

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

Aus irgendeinem Grund sind die Werte von dy+zx und SchSellStopLots100 in diesem Ausdruck nicht mehr gleich, wenn sie getrennt sind (ich habe es mit allerts überprüft), und die Variable tt nimmt den Wert 1 anstelle von 2 an.

Ich bitte Sie, mir zu helfen, den Fehler zu finden.

Ich danke Ihnen im Voraus.

 
Die Handelsbedingungen des Servers haben sich über das Wochenende geändert... Sie sollten den Test an einem separaten Terminal durchführen, der nicht mit einem Broker/Netzwerk verbunden ist, und ein spezielles Dienstprogramm verwenden, um den richtigen Spread einzustellen. Suchen Sie lieber nach Artikeln über das Testen von EAs und wie man es richtig macht.
 
nemo811:

(geprüft mit Allerts)

Es ist besser, mittels ND oder Modulo-Differenz zu prüfen, die kleiner ist als ein bestimmtes Delta.
 
splxgf:
Besser ist es, über ND oder Differenzen modulo weniger als ein Delta zu prüfen.

Aus irgendeinem Grund ergibt die Addition von dy und zx eine Zahl von 0,3 (in meinem speziellen Test der aktuellen Marktsituation), die im Vergleich zu dieser Zahl nicht gleich ist. Das heißt, ich addiere dy+zx und erhalte 0,3. Ich vergleiche dy+zx mit 0,3 - sie sind nicht gleich.

Wenn man dy und zx mit den Zahlen vergleicht, die sie zurückgeben, funktionieren die Gleichungen wie sie sollten.

Rätsel.

Bitte um Hilfe.

 
ramirez17:

Hallo, liebe Genossen!

Er stand vor einem unerwarteten Problem.

Vorgestern funktionierte das Testgerät wie gewünscht. Seit gestern Abend öffnet jede Version der Strategie im Tester einen Handel und nach einer Sekunde oder ein paar Minuten/Stunden der Geschichte, hört der Tester auf zu funktionieren. Keine Fehler, nichts.

Hat irgendjemand ein Problem damit? Bitte beraten

Das Testgerät hat ein Magazin. Dort steht alles geschrieben. Hier gibt es keine Telepathen, die die Protokolle Ihrer Tester aus der Ferne lesen können.