[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 391

 
Reshetov:

Im Prüfgerät und in der Tabelle werden die Dateien in verschiedenen Verzeichnissen geschrieben und gelesen:

  1. MetaTrader 4\tester\experts\dateien
  2. MetaTrader 4\experts\files

Yuri, Respekt! Ich habe es jetzt verstanden und behoben.

Zhunko, ich danke dir. Ich habe es auf diese Weise versucht, aber ich bekam eine Fehlermeldung wie "can't read binary data from string file" oder so ähnlich. Wie auch immer, meine Konstruktion funktioniert.

 
snail09_1:

Imho würde ich kein Array von zu schließenden Tickets erstellen, sondern in der Aufzählungsschleife für Marktaufträge jeden Auftrag prüfen, indem ich sein Ticket in den Eingang der Schließfunktion einführe und dabei die möglichen Bedingungen prüfe.

Können Sie dies im Code zeigen?

Ich meine, wie kann das umgesetzt werden?

 

Guten Tag zusammen!

Vielleicht ist diese Frage nicht für Neulinge geeignet, aber ich konnte keinen anderen Thread finden, in dem ich eine Frage stellen könnte:

Wie kann ich einen detaillierten Bericht von MetaTrader 4 entladen, um das Eigenkapital statt des Saldos auf dem Diagramm anzuzeigen? Ich weiß nicht, ob es realistisch ist, wenn ich es von MT4 oder auf eine andere bequeme Weise hochlade? Ich weiß nicht, ob ich das richtige Gleichgewicht habe oder nicht, ich möchte nur die Ergebnisse des Drawdowns wissen.

Ich habe keine Ahnung, wie man diesen Makler benutzt.

 
belous:

Können Sie das im Code zeigen?

Ich meine, wie kann sie umgesetzt werden?

So etwas wie das hier?

int ticket;

for(int z=OrdersTotal()-1;z>=0;z--)
   {
   if(!OrderSelect(z,SELECT_BY_POS))
      {
      _GetLastError=GetLastError();
      Print(" OrderSelect(",z,",SELECT_BY_POS)-Error #",_GetLastError);
      continue;
      }
   if(OrderMagicNumber()==magic && OrderSymbol()==Symbol())
      {
      if((OrderType()==OP_BUY)||(OrderType()==OP_SELL))
          {
          // Проверим условие для закрытия, и если истинно          
              {
              ticket=OrderTicket();
              //Закрываем его
              }
           }
       }
    }
 

Bitte um Hilfe.

Hier ist der Code


//-----------------Закрытие по истории в безубыток--------------------
   //---------------------расчет по истории ордеров номера очередной итерации----------------------------------------------- 
  Iteration = 0; // зануляем инерации перед их учетом в цикле по истории
  Sum_Loss = 0;  // суммарный убыток по этим итерациям

datetime 
Time_at_History_Current = 0,
Time_at_History_Previos = 0;     
 
 if(OrdersHistoryTotal() != 0)
   {
    for(int counter = OrdersHistoryTotal()-1; counter >= 0; counter--)
      {
       OrderSelect(counter, SELECT_BY_POS, MODE_HISTORY);
       if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
         {
          if(OrderType() == OP_BUY || OrderType() == OP_SELL)
            {
             if(OrderProfit() < 0) // если убыток по выбранному ордеру, то считаем суммарный и записываем время закрытия ордера
                                   // для последующего его анализа при подсчете количества итераций
                {
                 double lastLoss = OrderProfit();
                 Sum_Loss=Sum_Loss+lastLoss;  // считаем общий убыток по закрытым подряд убыточным ордерам
                 Time_at_History_Current = OrderCloseTime();
                } 
             
             //Print(" Time_at_History_Current_в цикле = ", TimeToStr(Time_at_History_Current, TIME_DATE|TIME_SECONDS));
             //Print(" Time_at_History_Previos_в цикле = ", TimeToStr(Time_at_History_Previos, TIME_DATE|TIME_SECONDS));
             
             if(Time_at_History_Current != Time_at_History_Previos) // если они не равны, то считаем итерации и делаем их равными
               {
                Time_at_History_Previos = Time_at_History_Current ;
                Iteration++;
                //Print("Iteration at History в условии сравнения  = ",  Iteration);
               }   
             else // они равны, то проверяем, дополнительно, наличие профита по выбранному следующему ордеру и выходим из цикла
               {
                if(OrderProfit() >= 0)
                  break;
               }
            }
         }
      }
   }

if (Sum_Loss < 0.0) { // Имеем убыток по закрытым позам
double money = Lots;
   BuyLots = GetBuyLotsSum();
        SellLots = GetSellLotsSum();
        if(BuyLots  > SellLots)money = BuyLots * 10;
        if(BuyLots  < SellLots)money = SellLots * 10;
  if (((AccountEquity() + Sum_Loss + (Sum_Loss / money)) >= AccountBalance()) && (((totalSell > 0) && (totalBuy < 1)) || ((totalSell < 1) && (totalBuy > 0)))) { // Достигли безубытка
    // Здесь какой-то код, который необходимо выполнить при достижении безубытка
        CloseAllBuy();
           CloseAllSell();
           Sum_Loss = 0.0;
           

Ich habe keine Möglichkeit, eine Schleife zu öffnen, wenn ein Geschäft im Minus abgeschlossen wurde, und wenn der nächste Auftrag über Null abgeschlossen wurde, d. h. positiver Saldo, aber weniger als negativ, addieren wir Plus zu Negativ und erhalten einen neuen negativen Wert, der bereits weniger ist.

if(OrderProfit() >= 0 && Sum_Loss < 0.0)
                  double lastLoss_two = OrderProfit();
                 Sum_Loss=Sum_Loss+lastLoss_two;  // считаем общий убыток по закрытым подряд убыточным ордерам
                 Time_at_History_Current = OrderCloseTime();
               }

Wenn das Signal negativer ausfällt, schließen wir den Auftrag und beginnen den Zyklus von vorne.


Die Situation ist, dass, wenn dieser Code schließt das Geschäft in Verlust, dann merkt es sich die Minus-Balance, und wenn es schließt das Geschäft in der plus, und das Plus ist weniger als die Balance, dann ist es zurückgesetzt Sum_Loss und ich brauche, dass es nicht auf Null gesetzt, und gemäht.

Und so funktioniert es jetzt:

er prüft eine geschlossene Order, wenn der Gewinn der geschlossenen Order kleiner als Null ist, dann wird dieser Gewinn zu Sum_Loss addiert, und so weiter, bis der Gewinn des offenen Handels Sum_Loss übersteigt (mehr als), wenn er erreicht ist, wird der Handel geschlossen, und Sum_Loss wird auf Null gesetzt und der Zyklus beginnt erneut.

Ich brauche:

Wenn der nächste Auftrag mit einem Minus abgeschlossen wird, wird der Minusgewinn zur Verlustsumme addiert, und wenn der nächste Auftrag mit einem positiven Gewinn abgeschlossen wird, wird die Verlustsumme um den Betrag reduziert, der sich aus dem Gewinn ergibt, was bedeutet, dass die Verlustsumme des nächsten offenen Auftrags bereits kleiner ist, und so weiter, bis der Auftragsgewinn größer als die Verlustsumme ist, und dann wird die Verlustsumme gelöscht und ein neuer Zyklus beginnt.

Summe_Verlust = 0;

1. geschlossener Auftrag: Gewinn (-50) < 0

Summe_Verlust + Gewinn (Summe_Verlust + (-50))

Summe_Verlust = -50;

2. geschlossener Auftrag: Gewinn (+40) > 0 und Summe/Verlust < 0

Summe_Verlust + Gewinn (Summe_Verlust + 40)

Summe_Verlust = -10


Vielleicht sollte die Variable Sum_Loss als negative Variable angegeben werden? Ich bin generell verwirrt. Ich habe viele Varianten ausprobiert, aber ich habe nicht das richtige Ergebnis erhalten. Ich habe viele Varianten ausprobiert und trotzdem nicht das richtige Ergebnis erzielt.
 
Wie kann ich einen EA testen, ohne den Spread zu berücksichtigen? Ist dies möglich?
 
Max79:
Wie kann ich einen EA testen, ohne den Spread zu berücksichtigen? Ist das möglich?
Googeln Sie es und Sie werden es finden, zum Beispiel hier (set spread ? site:mql4.com) lesen: https://www.mql5.com/ru/forum/102224/page2
 

Wer hat einen solchen Truthahn?

 

Bitte, helfen Sie.

Ich habe einen Modifikator von ausstehenden Aufträgen, in der EA, und es gibt mir einen Fehler - 1 beim Testen im Journal.

D.h. - "Wenn ich unveränderte Werte als Funktionsparameter übergebe, wird der Fehler 1 (ERR_NO_RSULT) erzeugt".

Ich habe vor der Änderung ein Häkchen gesetzt, aber das hilft nicht. Worin besteht der Fehler? Der EA wird getestet, aber wie kann ich Aufträge mit unveränderten Werten herausfiltern?

 
Run:

Wer hat so einen Truthahn?

Sehen Sie sich das an:

http://www.kimiv.ru/index.php?option=com_remository&Itemid=13&func=fileinfo&id=45