Frage zum Berater für mehrere Währungen - Seite 4

 

OK, VassaV, ich hab's!

Hier eine weitere Frage. Im üblichen Code wird eine Position angezeigt, wenn sie geöffnet wird:

//---------проверяем условие на покупку----------------------------
  if   ( бла-бла-бла  )
   {
  Lots=GetSizeLot(); 
  ticket=OrderSend("GBPUSD",0,Lots,Ask,Slippage,Bid-SL_long*Point,Ask+TP_long*Point,
                                                         "мульти",MagicNum,0,CLR_NONE);
  if    (ticket<0) { Print("Ошибка открытия ордера BUY #", GetLastError()); return (0); }  
 ... ... ...

Hier haben wir den Wert "Ticket". Das Schema in meinem EA ist ein bisschen anders, wie dieses hier:

if (GBP) {     //если  "выключатель" включен
if (!ExpertOrder(MagicGBP)) { //если ордеров по паре GBPUSD нет
 
//-------Проверяем условие на покупку-------------
if  (    бла-бла-бла     )
    {  
  //---- Цикл открытия ордера  -------------------------------------------                      
int Cnt=1;
  while (Cnt <= 5) 
  { //-----покупаем--------------
    Lots=GetSizeLot();
   if (OrderSend("GBPUSD",OP_BUY,Lots,ask_GBP,3,bid_GBP - sl_GBPUSD_long*point_GBP,
           ask_GBP+tp_GBPUSD_long*point_GBP,"M_1", MagicGBP, 0, Blue) > 0)  break;    
    else 
{ Print ("Ошибка открытия Buy #", ErrorDescription( GetLastError() ),
                                                  " попытка ", Cnt);
                               
        if (Cnt==5) return(0);  //если за 5 попыток не закрыли - выходим
        Cnt++;
        Sleep(15000); // ждём 15 секунд
      }   
    }
  }

Aber ich brauche auch den "Ticket"-Wert! Für dieses Paar. Ich kann das nicht den ganzen Morgen machen! Wer weiß, - Bitte, sag mir wie?

 

Allen, die einen Rat wollten, aber keine Zeit hatten, zu antworten, danke ich!

Ich glaube, ich habe es selbst herausgefunden (heute Nachmittag). Das geht so:

 //---- Цикл открытия ордера  -------------------------------------------                      
int Cnt=1;
  while (Cnt <= 5) 
  { //-----покупаем--------------
    Lots=GetSizeLot();
   ticketGBP = OrderSend("GBPUSD",OP_BUY,Lots,ask_GBP,3,bid_GBP - sl_GBPUSD_long*point_GBP,
           ask_GBP+tp_GBPUSD_long*point_GBP,"M_1", MagicGBP, 0, Blue);
         if (ticketGBP > 0)  break;    
    else 
{ Print ("Ошибка открытия Buy #", ErrorDescription( GetLastError() ),
                                                  " попытка ", Cnt);
                               
        if (Cnt==5) return(0);  //если за 5 попыток не закрыли - выходим
        Cnt++;
        Sleep(15000); // ждём 15 секунд
      }
 

Die Bedingung, den Expert Advisor 5 Minuten lang bei der Meisterschaft zu testen, und das nur 3 Wochen vor dem Ende des Semesters, war fast ein ANFANG für alle!

Individuell wird mein Expert Advisor auf die Geschichte von 12 Monaten auf ein Paar getestet, - nicht mehr als 3-4 Minuten. Es wirkt bei allen Zecken.

Aber wenn ich mehrere EAs zu einem - Multicurrency EA - zusammenführe, erhöht sich die Testzeit auf bis zu 7-10 Minuten!

Und ich deaktiviere alle Paare außer einem, das ich verwende.

Ich möchte Fachleute (und nicht nur sie) bitten, ihre Erfahrungen und Möglichkeiten zur Verkürzung der Testzeit mitzuteilen.

Der Aufbau des Expert Advisors ist wie folgt:

 
//---- input parameters---------
 
ЗАДАЕМ ВНЕШНИЕ ПАРАМЕТРЫ ПО КАЖДОЙ ПАРЕ
 
int init()
  {
   return(0);
  }
int deinit()
  {
   return(0);
  }
 
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  { 
 
//*********************************************************************
 
double ЗАДАЕМ ПЕРЕМЕННЫЕ ПО ПЕРВОЙ ПАРЕ 
double ЗАДАЕМ ПЕРЕМЕННЫЕ ПО ВТОРОЙ ПАРЕ
... ... ... ...
double ЗАДАЕМ ПЕРЕМЕННЫЕ ПО ПОСЛЕДНЕЙ ПАРЕ
 
 =========================================================
 
int Orders=OrdersTotal ();     //получаем кол-во открытых ордеров
if (Orders<3)                 //если  открытых ордеров <3
  { 
if (выключатель 1 вкл) {ОТКРЫВАЕМ ПЕРВУЮ ПАРУ } 
if (выключатель 2 вкл) {ОТКРЫВАЕМ ВТОРУЮ ПАРУ } 
... ... ... 
if (выключатель N вкл) {ОТКРЫВАЕМ ПОСЛЕДНЮЮ ПАРУ }  
  }
//========================================================================
for (int x=0; x<OrdersTotal(); x++)                                             {
    if (OrderSelect(x, SELECT_BY_POS, MODE_TRADES)) 
{       
if (UseTrailing 1) - ТРЕЙЛИНГ ПЕРВОЙ ПАРЫ
... ... ...
if (UseTrailing N) - Трейлинг последней пары
}
//======================================================================
   return(0);
  }
 
rid:

Die Bedingung, den Expert Advisor für 5 Minuten in der Meisterschaft in nur 3 Wochen vor dem Ende der Periode zu testen, war fast ein BEGINN für jeden!

Individuell wird mein Expert Advisor auf die Historie von 12 Monaten auf ein Paar getestet - nicht mehr als 3-4 Minuten. Es wirkt bei allen Zecken.

Aber wenn ich mehrere EAs zu einem - Multicurrency EA - vereinige, erhöht sich die Testzeit auf 7-10 Minuten!

Und ich deaktiviere alle Paare außer einem, das ich gerade teste.

Ich möchte Fachleute (und nicht nur sie) bitten, ihre Ansätze und Möglichkeiten zur Verkürzung der Testzeit mitzuteilen.

DieStruktur des Expert Advisors ist wie folgt:

 
//---- input parameters---------
 
ЗАДАЕМ ВНЕШНИЕ ПАРАМЕТРЫ ПО КАЖДОЙ ПАРЕ
 
int init()
  {
   return(0);
  }
int deinit()
  {
   return(0);
  }
 
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  { 
 
//*********************************************************************
 
double ЗАДАЕМ ПЕРЕМЕННЫЕ ПО ПЕРВОЙ ПАРЕ 
double ЗАДАЕМ ПЕРЕМЕННЫЕ ПО ВТОРОЙ ПАРЕ
... ... ... ...
double ЗАДАЕМ ПЕРЕМЕННЫЕ ПО ПОСЛЕДНЕЙ ПАРЕ
 
 =========================================================
 
int Orders=OrdersTotal ();     //получаем кол-во открытых ордеров
if (Orders<3)                 //если  открытых ордеров <3
  { 
if (выключатель 1 вкл) {ОТКРЫВАЕМ ПЕРВУЮ ПАРУ } 
if (выключатель 2 вкл) {ОТКРЫВАЕМ ВТОРУЮ ПАРУ } 
... ... ... 
if (выключатель N вкл) {ОТКРЫВАЕМ ПОСЛЕДНЮЮ ПАРУ }  
  }
//========================================================================
for (int x=0; x<OrdersTotal(); x++)                                             {
    if (OrderSelect(x, SELECT_BY_POS, MODE_TRADES)) 
{       
if (UseTrailing 1) - ТРЕЙЛИНГ ПЕРВОЙ ПАРЫ
... ... ...
if (UseTrailing N) - Трейлинг последней пары
}
//======================================================================
   return(0);
  }

es wird langsam getestet, hauptsächlich wegen der Indikatoren

Sie sind in dieser Struktur nicht sichtbar, aber Sie haben sie höchstwahrscheinlich, sonst würden sie höchstens eine Minute für den Test benötigen.

Die Indikatoren müssen geändert oder in den Code des EAs verschoben werden.

 

Loky,

Habe ich Sie richtig verstanden?

Bei meinen Indikatoren setze ich die Variablen. Und offenbar haben sie

double ЗАДАЕМ ПЕРЕМЕННЫЕ (индикаторов) ПО ПЕРВОЙ ПАРЕ

sollte wahrscheinlich nach innen verlegt werden in

if (выключатель 1 вкл) {ОТКРЫВАЕМ ПЕРВУЮ ПАРУ }

für jedes Paar entsprechend?

 
Schauen Sie sich als Beispiel Prototype-IX an. Dies ist ein Beispiel für einen Expert Advisor mit mehreren Währungen.

Es ermöglicht Ihnen, jedes beliebige von 12 Währungspaaren und auf mehreren Zeitrahmen zu testen.
15:18:05 ProtoType-IX Eingaben: EMN=10000; Slippage=3; RiskDelta=5; PeriodWPR=8; CriteriaWPR=25; ATRPeriod=40; kATR=0.5; ZeroBar=8; MinTargetinSpread=5; TP_SL_Criteria=2; MaxOpenedOrders=3; MaxOrderSize=5; <br / translate="no"> 15:18:05 2006.10.17 09:38 ProtoType-IX EURUSD,M15: indexPeriod=2 PeriodTesting=15 Symbol index=3 SymbolTesting=EURUSD
15:18:05 2006.10.17 09:38 NRTR_GATOR EURUSD,M15: erfolgreich geladen
15:18:09 2006.10.17 09:38 NRTR_GATOR EURUSD,M30: erfolgreich geladen
15:18:09 2006.10.17 09:38 NRTR_GATOR EURUSD,H1: erfolgreich geladen
15:18:09 2006.10.17 09:38 NRTR_GATOR EURUSD,H4: erfolgreich geladen
15:18:09 2006.10.17 09:38 NRTR_GATOR EURUSD,Daily: erfolgreich geladen
15:18:09 2007.01.02 00:00 NRTR_GATOR EURUSD,M30: Achtung, Trend ist nicht definiert. Balken vom Ende des 4.
15:18:09 2007.01.02 00 00:00 NRTR_GATOR EURUSD,M30: Warnung: Trend ist nicht definiert, er kann nicht sein
15:18:09 2007.01.02 00:00 NRTR_GATOR EURUSD,H1: Warnung: Trend ist nicht definiert, kann es nicht sein. Balken vom Ende von 1
15:18:09 2007.01.02 00:00 NRTR_GATOR EURUSD,H1: Warnung: Trend ist nicht definiert, er kann nicht sein
......................................

15:18:23 2007.08.17 22:17 Tester: Stop Loss #242 bei 1,3483 (1,3483 / 1,3485)
15:18:23 2007.08.17 22:59 NRTR_GATOR EURUSD,Daily: entfernt
15:18:23 2007.08.17 22:59 NRTR_GATOR EURUSD,H4: entfernt
15:18:23 2007.08.17 22:59 NRTR_GATOR EURUSD,H1: entfernt
15:18:23 2007.08.17 22:59 NRTR_GATOR EURUSD,M30: entfernt
15:18:23 2007.08.17 22:59 ProtoType-IX EURUSD,M15: Test abgeschlossen


Bei dem Modell "Alle Ticks" dauerte der Test 18 Sekunden bei 15 Minuten.
 

Vielen Dank an alle, die auf die Frage geantwortet haben. Es klärt sich allmählich auf, die Truthähne sind drinnen verstaut. Und jetzt ist die Grenze erreicht.

Rosh, - habe schon ein Dutzend Mal versucht, den von Ihnen genannten Experten zu erreichen. Aber... jedes Mal, wenn ich einen Rückzieher gemacht habe... Mit meinen bescheidenen Kenntnissen kann ich den Code und seine Struktur immer noch nicht begreifen. Ich bin verwirrt und weiß nicht so recht, wo ich anfangen und wie ich die Forschung strukturieren soll. Es gibt viele Unklarheiten, und ich kann nicht alles auf einmal angehen. Ich fange an, alles zu verstehen, und bald halte ich inne, um zu überlegen, wo ich angefangen habe und wofür ...

Und bei dieser Gelegenheit habe ich eine Frage zu dem Artikel "Beispiel für die Erstellung eines Expert Advisors" ^

 
klerk:
Das Prinzip des Multicurrency Expert Advisor ist ungefähr wie folgt:
1. bei der Berechnung von Indikatoren bestimmte Währungen und Zeitintervalle angeben, z.B.: iRSI("GBPUSD",60,GBPUSD_period,3,3,MODE_SMA,0,MODE_MAIN,i); //aber hier ist ein Fehler
2. mit Hilfe von MarketInfo Preise, Punkte usw. ermitteln.
3. iLow(...) anstelle von z. B. Low[0] verwenden
und gelten für alle Währungspaare.
Viel Glück!
Die einzige Unannehmlichkeit ist, dass alle gehandelten Symbole offene Charts mit ihren Zeitrahmen haben müssen.

Wenn Charts nicht geöffnet sind oder mit anderen Zeitrahmen als den verwendeten geöffnet sind, müssen Sie ständig

Checks bei jedem Niesen - auch iRSI darf nicht funktionieren ... bis zum Terminaltausch ...

Hochachtungsvoll - S.D.
 

Online habe ich im EA (in den Indizes) für alle Paare f=1 min gesetzt (um seine Leistung zu überprüfen).

Und ich habe es auf das Diagramm des ersten Paares auf die Zeitf=1 min. Aber bei anderen Paaren des EA ist der Zeitrahmen oft anders. Und trotzdem operiert der EA auf allen Paaren genau in Form von Zeitminuten, wie es im Code implementiert ist!

Oder habe ich Sie vielleicht nicht richtig verstanden?

 
klerk:
Das Prinzip des Multi-Currency Expert Advisors ist wie folgt:
1. bei der Berechnung der Indikatoren bestimmte Währungen und Zeitintervalle angeben, z.B.: iRSI("GBPUSD",60,GBPUSD_period,3,3,MODE_SMA,0,MODE_MAIN,i); //aber hier tritt ein Fehler auf
2. Preise, Punkte usw. mit MarketInfo ermitteln.
3. Verwenden Sie iLow(...) anstelle von Low[0] zum Beispiel
und
schreiben Sie es auf alle Währungspaare.
Viel Glück!


Könnten Sie mir bitte sagen, ob die Ersetzung der Konstruktion korrekt sein wird:

H=High[iHighest("USDJPY", PERIOD_H4, MODE_HIGH, 50, 1)];

in Multicurrency Expert Advisor Code, wenn Sie an einem fremden Instrument mit einem solchen arbeiten:

double H_current, H_previous;
H_current=0; H_previous=0;
 
for (int n=1; n<51; n++)
  {
    H_previous=H_current;
    H_current=iHigh("USDJPY", PERIOD_H4, n);
    H=MathMax(H_previous, H_current);
  }

Wenn nicht, geben Sie bitte an, wo der Fehler liegt und wie man es richtig macht?

Ich danke Ihnen im Voraus.

Grund der Beschwerde: