[ARCHIV!] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen - 4. - Seite 361

 
Wie kann man erreichen, dass Indikatoren aus verschiedenen Zeitrahmen im Tester berücksichtigt werden, und ist dies überhaupt möglich?
 
vilard:
Wie kann man erreichen, dass Indikatoren aus verschiedenen Zeitrahmen im Tester berücksichtigt werden, und ist dies überhaupt möglich?
Was bedeutet es, einen Indikator im Strategy Tester zu berücksichtigen? (1) Vielleicht sollte der Indikator eines anderen Zeitrahmens während der Visualisierung angezeigt werden, oder (2) im EA-Code, in der Indikatorfunktion sollten Sie einen Wert für einen anderen Zeitrahmen berechnen?
 
vilard:
Wie kann man erreichen, dass Indikatoren aus verschiedenen Zeitrahmen im Tester berücksichtigt werden, und ist dies überhaupt möglich?

möglich: https://docs.mql4.com/ru/indicators/icustom

https://docs.mql4.com/ru/constants/timeframes

 

Der EA ist so konzipiert, dass er Signale auf Balken mit Index 1 und 2 generiert (d.h. Eröffnungs- und Schließungsaufträge bei der Eröffnung eines neuen Balkens).

Im Testprogramm werden für OrderClose abwechselnd die Fehler 138 und 4051 (es scheint auf Ticket zu schimpfen) erzeugt.

Bitte helfen Sie mir, dieses Problem zu lösen.

   if(Mas_Ord_New[0][0]!=0)
    {
     if(Signal==2)
      {
        for(i=0; i<=Mas_Ord_New[0][0]; i++)
         {
           ticket=Mas_Ord_New[i][4];
           lts=Mas_Ord_New[i][5];
           Ans=OrderClose(ticket,lts,Bid,5);
           if(Ans==false) 
           Alert("Закрыть BUY ",ticket, " не удалось. Ошибка: ", GetLastError());
         }
      }
     if(Signal==3)
      {
        for(i=0; i<=Mas_Ord_New[0][0]; i++)
         {
           ticket=Mas_Ord_New[i][4];
           lts=Mas_Ord_New[i][5];            
           Ans=OrderClose(ticket,lts,Ask,5);
           if(Ans==false) 
            Alert("Закрыть SELL ",ticket, " не удалось. Ошибка: ", GetLastError());
         }       
      }
    }

 // Функция из учебника

int Terminal()
 {
   int Qnt=0;
   
   ArrayCopy(Mas_Ord_Old, Mas_Ord_New); // Сохранение информации
   Qnt=0; // Обнуление счетчика
   ArrayInitialize(Mas_Ord_New,0);  // Обнуление массива
   ArrayInitialize(Mas_Tip,0);  // Обнуление массива
   
   for (int n=0; n<=OrdersTotal(); n++)
    {
      if ((OrderSelect(n,SELECT_BY_POS)==true) &&
          (OrderSymbol()==Symbol()) && (OrderMagicNumber()==Magic))
       {
         Qnt++;
         Mas_Ord_New[Qnt][1]=OrderOpenPrice();
         Mas_Ord_New[Qnt][2]=OrderStopLoss();
         Mas_Ord_New[Qnt][3]=OrderTakeProfit();
         Mas_Ord_New[Qnt][4]=OrderTicket();
         Mas_Ord_New[Qnt][5]=OrderLots();
         Mas_Tip[OrderType()]++;
         Mas_Ord_New[Qnt][6]=OrderType();
         Mas_Ord_New[Qnt][7]=OrderMagicNumber();
         if (OrderComment()=="")
            Mas_Ord_New[Qnt][8]=0;
         else
            Mas_Ord_New[Qnt][8]=1;
       }
    }
   Mas_Ord_New[0][0]=Qnt;
   return;
 }
 
silhouette:

Der EA ist so konzipiert, dass er Signale auf Balken mit Index 1 und 2 generiert (d.h. Eröffnungs- und Schließungsaufträge, wenn ein neuer Balken geöffnet wird).

Im Testprogramm werden für OrderClose abwechselnd die Fehler 138 und 4051 (es scheint auf Ticket zu schimpfen) erzeugt.

Bitte helfen Sie uns, dieses Problem zu lösen.

Versuchen Sie die folgende Konstruktion, um die Position zu schließen:

int err;
// ---
if (...) // условие закрытия позиции
{  if (OrdersTotal()>0)
   {  for (int i=OrdersTotal()-1; i>=0; i--)
      {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         {  // фильтрация позиции по текущему символу:
            if (OrderSymbol()!=Symbol()) continue;
            // фильтрация позиции по магик-номеру:
            if (OrderMagicNumber()!=MagNum) continue;
            // ... можно и другие фильтры поставить.
            // --- закрытие позиции Buy.
            if (OrderType()==OP_BUY)
            // перед открытием или закрытием позиции
            // обновляйте котировки с помощью RefreshRates()
            // дабы избежать устаревание запрошенной цены,
            // возможной причины ошибки 138
            {  RefreshRates(); 
               OrderClose(OrderTicket(),OrderLots(),Bid,30);
               err=GetLastError();
               if (err>0)  Alert("Ошибка при закрытии позиции Buy (",err,").");
               if (err==0) Alert("Позиция Buy закрыта успешно.");
               err=0; return(0);
            }
            // --- закрытие позиции Sell.
      else  if (OrderType()==OP_SELL)
            {  RefreshRates();
               OrderClose(OrderTicket(),OrderLots(),Ask,30);
               err=GetLastError();
               if (err>0)  Alert("Ошибка при закрытии позиции Sell (",err,").");
               if (err==0) Alert("Позиция Sell закрыта успешно.");
               err=0; return(0);
            }
   }  }  }
}
 
chief2000:
USDJPY


danke
 
Roman.:


0,01 - NDD-Cent-Konto. TR und SL = 0.

Alles ist überall gleich.

Am 4. - bei Währungspaaren - wird ohne Frage alles nach dem Algorithmus getestet.

Auf Alpen - Gold - getestet nach dem Algorithmus.

Ich möchte meinem GRAAL, der in der 4. Stufe arbeitet, Metalle hinzufügen, bisher jedoch nur Währungen.


Es gibt also kein Problem mit Währungen?
 
Vinin:

Es gibt also keine Probleme mit Währungen?


Ja, es gibt keine Probleme.

Viktor Iwanowitsch, ich danke Ihnen von ganzem Herzen, ich habe es durch Ihre Leitfragen herausgefunden.

Es gibt keine Metalle, nur Währungen auf dem NDD in 4, deshalb wird beim Testen der Fehler #131 ausgegeben - falsches Volumen. Dessen war ich mir nicht bewusst.

Bei Gold und Silber habe ich bereits begonnen, die Parameter in Alps zu optimieren.

 
paladin80:

Um eine Position zu schließen, versuchen Sie diese Konstruktion:


Danke, es funktioniert!
 

Können Sie mir bitte sagen, wie ich den HTML-Code z.B. für ein Werbebanner einfügen kann?

Grund der Beschwerde: