Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 360

 

Guten Tag.

Können Sie mich bitte beraten, wie man den Code richtig zu schreiben, wenn Handel EA in MT4, ich bin sehr neu zu programmieren.

Ich muss den letzten geschlossenen Auftrag auswählen und seinen Gewinn vergleichen. Wenn der Gewinn größer als 0 ist, muss ich nichts tun, wenn er kleiner als 0 ist, muss ich etwas tun.

double GetSizeLot(double lastlot=0) //Функция возвращает значение лотов 
  {
   double Lot2,MinLots,MaxLots;
   int j=OrdersHistoryTotal();
   
   MinLots=Lots;
   MaxLots=MaxLot;
   if(!DynamicLot)Lot2=Lots;
   if(lastlot<Lot2)lastlot=Lot2;
   
   if(OrderSelect(j,SELECT_BY_POS,MODE_HISTORY))
     {
     if(OrderProfit()<0) lastlot=lastlot*Martin;
     if(OrderProfit()>0) lastlot=Lot2;
     }
   Lot2=lastlot;
   if(Lot2 < MinLots) Lot2 = MinLots;
   if(Lot2 > MaxLots) Lot2 = MaxLots;
   return(NormalizeDouble(Lot2,2));
  }

Ich habe großen Respekt, Alexander.

 
Menshikov:

Guten Tag.

Können Sie mich bitte beraten, wie man den Code richtig zu schreiben, wenn Handel EA in MT4, ich bin sehr neu zu programmieren.

Ich muss den letzten geschlossenen Auftrag auswählen und seinen Gewinn vergleichen. Wenn sein Gewinn größer als 0 ist, muss ich nichts tun, wenn er kleiner als 0 ist, muss ich etwas tun.

Ich habe großen Respekt, Alexander.

//+------------------------------------------------------------------+

datetime time=0; double profit=0,lots=0;
for(int i=OrdersHistoryTotal()-1; i>=0; i--)
   if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
      if(OrderSymbol()==_Symbol)
         if(OrderMagicNumber()==MagicNumber || MagicNumber==-1)
            if(OrderCloseTime()>time) // находим последний в истории ордер
              {
               time=OrderCloseTime(); // запомним время
               profit=OrderProfit();  // запомним профит
               his_lt=OrderLots();    // запомним лот
              }

if(profit<0) //если профит меньше нуля
   lots=his_lt*2; // Увеличим в два раза

//+------------------------------------------------------------------+
 
Vladimir Pastushak:
Ich danke Ihnen vielmals.
 
Vladimir Pastushak:
Ich frage mich, wozu die Uhrzeit dient, warum man sich die Schließzeit merkt, wenn man sowieso die letzte in der Liste wählt, und was ist mit dem Zyklus? Und warum ziehen Sie nicht den Tausch und die Provision in Betracht? Selbst wenn OrderProfit()>0 ist, kann der tatsächliche Gewinn negativ sein. Wenn Sie direkt mit der Liste der Aufträge arbeiten, sollten Sie keine Codestücke aus der Schleife übrig lassen, die zum Zeitpunkt des Schließens nach dem letzten Auftrag suchen. Eine Sache ist entweder Zuverlässigkeit und Sicherheit oder Schnelligkeit. Und Sie haben einen Mischmasch.
 
Artyom Trishkin:
Ich frage mich, wozu die Uhrzeit dient, warum man sich die Schließzeit merkt, wenn man sowieso die letzte in der Liste wählt, und was ist mit dem Zyklus? Und warum ziehen Sie nicht den Tausch und die Provision in Betracht? Selbst wenn OrderProfit()>0 ist, kann der tatsächliche Gewinn negativ sein. Wenn Sie direkt mit der Liste der Aufträge arbeiten, sollten Sie keine Codestücke aus der Schleife übrig lassen, die zum Zeitpunkt des Schließens nach dem letzten Auftrag suchen. Eine Sache ist entweder Zuverlässigkeit und Sicherheit oder Schnelligkeit. Was Sie haben, ist ein Wirrwarr.

Was Sie damit sagen wollen, ist, dass

   if(OrderSelect(OrdersHistoryTotal(),SELECT_BY_POS,MODE_HISTORY))

Tun Sie das?

Die Person hat nur um einen Gewinnauftrag gebeten, warum sollte man etwas aufzwingen, um das man nicht gebeten hat? Aber ich stimme mit Ihnen überein ....

 

Bitte geben Sie an, wie man eine offene Order in MQL4 auf MT4 nach 20 Bars schließt, d.h. wenn eine Order geöffnet wird und 20 neue Bars erscheinen, wird sie geschlossen. (nur 1 Auftrag ist immer offen). Aus irgendeinem Grund funktioniert dieser Code im Strategietester nicht, und wir brauchen ihn, um dies zu tun.


Der Code hat folgende Bedeutung: Wir prüfen, ob wir offene Aufträge haben, wenn nicht, eröffnen wir einen Auftrag und notieren in der "z"-Variablen den offenen Preis des 1. Balkens und dann mit jedem Tick prüfen wir den offenen Preis des 20. Balkens und wenn der 1. (natürlich können die Preise während des Prozesses übereinstimmen, aber das wird sehr selten sein, außerdem können wir mehr Parameter des 1. Taktes in Variablen schreiben)


double z; //объявление переменной

           //ОТКРЫТИЕ ОРДЕРА
           if(OrdersTotal() == 0) // если нет открытых ордеров то открывать ордер
              {
               OrderSend(Symbol(), OP_SELL, 0.1, Bid, 3, Bid+150*Point, Bid-10*Point);
                   z = Open[1]; // здесь переменной "z" присваивается цена открытия 1-го бара
              }
            else

           Print("ORDER NE USTANOVLEN!!!");




           //ЗАКРЫТИЕ ОРДЕРА

    if (z==Open[20])  //если цена записанная в переменную "z" равна цене 20-го бара, то закрывать ордер
        {
           

            //-----------------код закрывает все ордера--------------------
   bool   result;
   int    error;

 while (OrdersTotal()>0)
 {
   if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))
     {   if(OrderType()==OP_BUY)  result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),MarketInfo(OrderSymbol(),MODE_DIGITS)),3,CLR_NONE);
          if(OrderType()==OP_SELL) result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_ASK),MarketInfo(OrderSymbol(),MODE_DIGITS)),3,CLR_NONE);
          if (OrderType()==OP_BUYLIMIT || OrderType()==OP_BUYSTOP || OrderType()==OP_SELLLIMIT || OrderType()==OP_SELLSTOP)
           OrderDelete(OrderTicket());
         
           if(result!=TRUE) { error=GetLastError();
              Print("LastError = ",error, " ",Symbol()); }
           else error=0; }
   else Print( "Error when order select ", GetLastError());

  }
//------------конец кода закрывающего ордер------------------
           
           
        }
      else
      Print("ORDER NE ZAKRYT!!!");
 
BEGEMOT32:

Bitte geben Sie an, wie man eine offene Order in MQL4 auf MT4 nach 20 Bars schließt, d.h. wenn eine Order geöffnet wird und 20 neue Bars erscheinen, wird sie geschlossen. (nur 1 Auftrag ist immer offen). Aus irgendeinem Grund funktioniert dieser Code im Strategietester nicht, und wir brauchen ihn, um dies zu tun.


Der Code hat folgende Bedeutung: Wir prüfen, ob wir offene Aufträge haben, wenn nicht, eröffnen wir einen Auftrag und notieren in der "z"-Variablen den offenen Preis des 1. Balkens und dann mit jedem Tick prüfen wir den offenen Preis des 20. Balkens und wenn der 1. (natürlich können während des Prozesses die Preise übereinstimmen, aber das wird sehr selten sein, außerdem können wir mehr Parameter des 1. Taktes in Variablen schreiben)


Das war's, ich habe es selbst herausgefunden, ich hätte die Variable außerhalb von int start() deklarieren müssen - jetzt funktioniert es einwandfrei
 
BEGEMOT32:
Das ist es, ich habe es selbst herausgefunden, ich hätte eine Variable außerhalb von int start() deklarieren sollen - jetzt funktioniert es gut

Ich habe Ihren Code ein wenig vereinfacht, aber es gibt immer noch Fehler in Ihrem Code

//ОТКРЫТИЕ ОРДЕРА
if(OrdersTotal()==0) // если нет открытых ордеров то открывать ордер
   if(OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Bid+150*Point,Bid-10*Point)<0)
      Print("ORDER NE USTANOVLEN!!!");

//-----------------код закрывает все ордера--------------------
   bool   result;
   int    error;
   while(OrdersTotal()>0)
     {
      if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))
        {
         if(iBarShift(OrderSymbol(),Period(),OrderOpenTime())==20)
           {
            if(OrderType()==OP_BUY) result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),MarketInfo(OrderSymbol(),MODE_DIGITS)),3,CLR_NONE);
            if(OrderType()==OP_SELL) result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_ASK),MarketInfo(OrderSymbol(),MODE_DIGITS)),3,CLR_NONE);
            if(OrderType()==OP_BUYLIMIT || OrderType()==OP_BUYSTOP || OrderType()==OP_SELLLIMIT || OrderType()==OP_SELLSTOP)
               OrderDelete(OrderTicket());
           }
         if(result!=TRUE)
           {
            error=GetLastError();
            Print("LastError = ",error," ",Symbol());
           }
         else error=0;
        }
      else Print("Error when order select ",GetLastError());

     }
 

Ich schreibe einen EA mit mehreren Währungen, aber ich kann nicht verstehen, warum er unterschiedliche Preise zur gleichen Zeit zurückgibt, wenn ich ihn mit verschiedenen Währungen verknüpfe

Kurz gesagt, der Code:

am Anfang

EventSetTimer(60);

in OnTimer()

MqlTick last_tick;
if(SymbolInfoTick("EURNZD",last_tick))
{
    Print("Last Ask: ", last_tick.ask);
}

Wenn ich meinen EA zum Beispiel auf EURNZD teste

2015.05.18 00:07:00 Lat Ask: 1.5370

Wenn ich ein anderes Währungspaar verwende

2015.05.18 00:07:00 Lat Ask: 1.5323

Dieser Wert ist völlig anders, und im zweiten Fall könnte es laut Diagramm einen solchen Wert zumindest für mehrere Stunden nicht geben

Im Strategietester sind alle Ticks im Handelsmodus. Ich habe das Gefühl, dass die Werte im Strategietester ungefähr sind, wenn es sich nicht um das Hauptpaar handelt.

Ich vergaß hinzuzufügen, dass dies Meta Trade 5 ist.

Ich habe herausgefunden, dass der Preis beim ersten Mal falsch ist und beim zweiten Mal normal ist.

 
1. können Sie aus der Historie herausfinden, wie viele Ticks im Tick-Volumen nach oben und unten gegangen sind?

2. es ist schon einige Monate her, dass ich autochartis gelöscht habe, aber die Protokollmeldungen tauchen immer wieder auf. Die Software versucht immer wieder, die Dateien zu öffnen.

Wie löscht man Autochartis vollständig?

2015.05.25 15:36:42.983 Cannot open file 'C:\Users\asus\AppData\Roaming\MetaQuotes\Terminal\................................\MQL4\indicators\Autochartist Volatility.ex4' [2]
2015.05.25 15:36:42.983 Cannot open file 'C:\Users\asus\AppData\Roaming\MetaQuotes\Terminal\................................\MQL4\indicators\Autochartist Key Levels.ex4' [2]
2015.05.25 15:36:42.982 Cannot open file 'C:\Users\asus\AppData\Roaming\MetaQuotes\Terminal\................................\MQL4\indicators\Autochartist Chart Patterns.ex4' [2]

Grund der Beschwerde: