Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1308

 
Alexandr Sokolov:
Wo erfahre ich im Strategietester die Verfallszeit der Order? Die Registerkarte "Spalten" enthält sie nicht.
Wie stellen Sie die Ablaufzeit ein?
 
MakarFX:
Wie stellen Sie die Ablaufzeit ein?
void Open_Order(ENUM_ORDER_TYPE  Type,
                double           price,
                double           sl_price,
                double           tp_price,
                datetime         close)
  {
   
   MqlTradeRequest  request;
   MqlTradeResult   result;
   
   ZeroMemory(request);
   ZeroMemory(result);
   
   request.action        = TRADE_ACTION_PENDING;
   request.magic         = id_number;
   request.symbol        = _Symbol;
   request.volume        = volume;
   request.price         = price;
   request.sl            = sl_price;
   request.tp            = tp_price;
   request.deviation     = slippage;
   request.type          = Type;
   request.type_filling  = ORDER_FILLING_FOK;
   request.type_time     = ORDER_TIME_SPECIFIED;
   request.expiration    = close;
   
   if(!OrderSend(request,result)) Print("Error - ",result.retcode);
   
  }


 
Alexandr Sokolov:


Fügen Sie einen Kommentar zum Haftbefehl hinzu, ich sehe keine anderen Optionen(
 
MakarFX:
Zum Kommentar zur Bestellung, ich sehe keine anderen Optionen(

Dankeschön

 
Dies ist mein erster Kommentar in diesem Forum und ich bin mit der Gemeinschaft nicht besonders vertraut, also werfen Sie nicht zu viele Tomaten auf mich. Auf den Punkt gebracht. Als ich meinen EA schrieb, stand ich vor dem Problem, dass OrdersTotal() für alle offenen Aufträge funktioniert (was Sinn macht), und im Falle der Einstellung von Bedingungen für "eine Bestellung geschlossen, die nächste geöffnet" war ich überrascht, herauszufinden, dass selbst wenn ich Meister in Bedingungen und doppelten Code einstelle, zwei oder mehr EAs auf offenen Charts auf meinem Konto einander nicht gleichzeitig arbeiten lassen (bis eine Bestellung geschlossen ist, wird eine andere nicht geöffnet). Ich suchte eine Menge von Orten zu diesem Thema - ich habe eine Menge von Lösungen und wie ich verstehe, ist es elementar, aber in allen Fällen, nichts funktioniert. Welche Bedingung sollte ich beim Öffnen und/oder Schließen von "if... (...) ", um OrdersTotal nur für einen bestimmten EA, der angehängt ist, eindeutig zu kennzeichnen, während der andere EA (dessen OrdersTotal) in keiner Weise damit in Verbindung steht und seine eigene Zählung aller Aufträge behält. Ich danke Ihnen.
 
Порт-моне тв:
Dies ist mein erster Kommentar im Forum, ich bin nicht besonders vertraut mit der Gemeinschaft, also werft nicht mit Tomaten nach mir. Auf den Punkt gebracht. Als ich meinen EA schrieb, stand ich vor dem Problem, dass OrdersTotal() für alle offenen Aufträge funktioniert (was Sinn macht), und ich war überrascht, herauszufinden, dass selbst wenn ich einen Master in Bedingungen und Code kopieren, zwei oder mehr EAs auf offenen Charts zur gleichen Zeit lassen sich nicht gegenseitig arbeiten (bis ein Auftrag geschlossen wird, wird der nächste nicht geöffnet). Ich suchte eine Menge von Orten zu diesem Thema - ich habe eine Menge von Lösungen und wie ich verstehe, ist es elementar, aber in allen Fällen, nichts funktioniert. Welche Bedingung sollte ich beim Öffnen und/oder Schließen von "if... (...) ", um OrdersTotal nur für einen bestimmten EA, der angehängt ist, eindeutig zu kennzeichnen, und der andere (sein OrdersTotal) würde in keiner Weise in Beziehung stehen und seine eigene Zählung aller Aufträge behalten. Ich danke Ihnen.

Hängen Sie Ihren Code an und Sie werden auf die Fehler hingewiesen

 
//+------------------------------------------------------------------+
//| sova_2bars.mq4 |
//| Copyright 2020, MetaQuotes Software Corp.
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp.
#property link "https://www.mql5.com"
#Eigenschaft Version "1.00"
#Eigenschaft streng

extern int Magic = 6477;
extern double Lot = 0,01;
extern int Schlupf = 3;
extern int TakeProfit = 1600;
extern int StopLoss = 800;
extern int Experation = 0;

double Openone, //Eröffnungskurs der ersten Kerze
Opentwo, //Eröffnungskurs der zweiten Kerze
Closeone, //Schlusskurs der ersten Kerze
Closetwo, //die Szene der zweiten Kerze
Lowone, //Mindestpreis der ersten Kerze
Lowtwo, //der Preis der ersten Kerze
Lowthree, //die Szene des Minimums der dritten Kerze
Openthree, //Eröffnungskurs einer dritten Kerze
Closethree, //Schlusskurs der dritten Kerze
CloseOrder, //Auftrag abschließen
Highone, //Maximalpreis der ersten Kerze
Hightwo, //das Preishoch der zweiten Kerze
Highhree, //das Kursmaximum der zweiten Kerze
Highfour, //der Preis ist das Maximum der zweiten Kerze
Highfive, //Preis für maximal eine zweite Kerze
Highsix, //Preis der maximalen zweiten Kerze.
Highseven, //Preis der maximalen zweiten Kerze
Highheight, //Preis für maximal eine zweite Kerze
Lowfour, //der Preis für das Minimum der vierten Kerze
Lowfive, //erster Preis für eine fünfte Kerze
Lowsix, //die Szene eines sechsten Kerzenminimums
Lowseven, //die Szene mit mindestens einer siebten Kerze
Loweight, //die Szene des Minimums der achten Kerze
Closefour, //der Schlusskurs der vierten Kerze
Openfour,
Niedrig15,
Niedrig25,
SLbuy, TPbuy, SLsell, TPsell, //Eröffnungskurs der vierten Kerze
OrderOpenPrice;
int ticket, ticketclose;

//+------------------------------------------------------------------+
Experten-Initialisierungsfunktion //|.
//+------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Experten-Deinitialisierungsfunktion |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| Experten-Tick-Funktion |
//+------------------------------------------------------------------+
void OnTick()
{
//--- Ermittlung der Preise für die erforderlichen Stäbe
Openone = NormalizeDouble(iOpen(Symbol(), Period(), 0), Digits);
Highone = NormalizeDouble(iHigh(Symbol(), Period(), 0), Digits);
Hightwo = NormalizeDouble(iHigh(Symbol(), Period(), 1), Digits);
Highthree = NormalizeDouble(iHigh(Symbol(), Period(), 2), Digits);
Highfour = NormalizeDouble(iHigh(Symbol(), Period(), 3), Digits);
Highfive = NormalizeDouble(iHigh(Symbol(), Period(), 4), Digits);
Highsix = NormalizeDouble(iHigh(Symbol(), Period(), 5), Digits);
Highseven = NormalizeDouble(iHigh(Symbol(), Period(), 6), Digits);
Higheight = NormalizeDouble(iHigh(Symbol(), Period(), 7), Digits);
Opentwo = NormalizeDouble(iOpen(Symbol(), Period(), 1), Digits);
Openthree = NormalizeDouble(iOpen(Symbol(), Period(), 2), Digits);
Openfour = NormalizeDouble(iOpen(Symbol(), Period(), 3), Digits);
Closeone = NormalizeDouble(iClose(Symbol(), Period(), 0), Digits);
Closetwo = NormalizeDouble(iClose(Symbol(), Period(), 1), Digits);
Closethree = NormalizeDouble(iClose(Symbol(), Period(), 2), Digits);
Closefour = NormalizeDouble(iClose(Symbol(), Period(), 3), Digits);
Lowone = NormalizeDouble(iLow(Symbol(), Period(), 0), Digits);
Lowtwo = NormalizeDouble(iLow(Symbol(), Period(), 1), Digits);
Lowthree = NormalizeDouble(iLow(Symbol(), Period(), 2), Digits);
Lowfour = NormalizeDouble(iLow(Symbol(), Period(), 3), Digits);
Lowfive = NormalizeDouble(iLow(Symbol(), Period(), 4), Digits);
Lowsix = NormalizeDouble(iLow(Symbol(), Period(), 5), Digits);
Lowseven = NormalizeDouble(iLow(Symbol(), Period(), 6), Digits);
Low15 = NormalizeDouble(iLow(Symbol(), Period(), 14), Digits);
Low25 = NormalizeDouble(iLow(Symbol(), Period(), 24), Digits);

//----индикатор - условия--------------------------------------


double BigTrand = iMA(NULL, 0,50,0,MODE_SMA, PRICE_CLOSE, 1);
double SmallTrand = iMA(NULL, 0,5,0,MODE_SMA, PRICE_CLOSE, 1);
double LowerBB = iBands(_Symbol,_Periode,17,1,0,PRICE_CLOSE,MODE_LOWER,1);
double UpperBB = iBands(_Symbol,_Periode,17,1,0,PRICE_CLOSE,MODE_UPPER,1);
double MiddleBB = iBands(_Symbol,_Periode,17,1,0,PRICE_CLOSE,MODE_MAIN,1);
double Bears = iBearsPower(_Symbol,_Periode, 5, PRICE_CLOSE,0);
double Bulls = iBullsPower(_Symbol,_Periode, 5, PRICE_CLOSE,0);
double Parab = iSAR(_Symbol,_Periode,0.002, 1, 0);

SLbuy = NormalizeDouble(Ask - StopLoss*Point, 5);
TPbuy = NormalizeDouble(Ask + TakeProfit*Point, 5);
SLsell = NormalizeDouble(Bid + StopLoss*Point, 5);
TPsell = NormalizeDouble(Bid - TakeProfit*Point, 5);

//-------------функции---------------------------------------

wenn ( Ask>0 && Bid >0)
{

wenn (Auftragssumme()<1)
wenn (Schließen[1]>Öffnen[1])
if(Bears < -0,00035 && MiddleBB > Ask)
{
ticket = OrderSend(Symbol(),OP_BUY, Lot, Ask, Slippage, SLbuy, TPbuy, "open buy order", Magic, 0, Blue)
}
if(AufträgeSumme()==1)
if(Bulls > 0,00035 && MiddleBB < Ask && Bears > 0 && Opentwo < Closetwo && Openthree < Closethree && BigTrand < Ask)
CloseBuyPositions1();
}





//---- Ende der Funktion
}
//---------------------------------------------------------------------
void CloseBuyPositions1()
{
for(int i=OrdersTotal()-1; i>=0; i--)
{
OrderSelect(i, SELECT_BY_POS,MODE_TRADES);
string CurrencyPair=OrderSymbol();
if(_Symbol==WährungPaar)
if(Auftragsart()==OP_BUY)
{
OrderClose(OrderTicket(), OrderLots(), Bid, 3, NULL);
}
}
}




 
 int OrderOfSymbol=CounterOrderTradeType(-1);
 
//-------------функции---------------------------------------

if ( Ask>0 && Bid >0)
   {

 if (OrderOfSymbol<1)
    if (Close[1]>Open[1])
    if(Bears < -0.00035 && MiddleBB > Ask)
         {
    ticket = OrderSend(Symbol(),OP_BUY, Lot, Ask, Slippage, SLbuy, TPbuy, "открыт ордер на покупку", Magic, 0, Blue);
         }
         
   
if (OrderOfSymbol==1)
   if(Bulls > 0.00035 && MiddleBB < Ask && Bears > 0 && Opentwo < Closetwo && Openthree < Closethree && BigTrand < Ask)
    CloseBuyPositions1();
   } 
//+------------------------------------------------------------------+
//| Подсчет ордеров потекущему символу                               |
//+------------------------------------------------------------------+
int CounterOrderTradeType(ENUM_ORDER_TYPE order_type)
   {
   int cnt=0;
   //----
   for(int pos=OrdersTotal()-1;pos>=0;pos--)
      {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES)==false) continue;
      if(OrderSymbol()!=_Symbol) continue;
      if(order_type == OrderType() || order_type == -1) cnt++;
      }
   //----
   return(cnt);
   }
 
Порт-моне тв:
//+------------------------------------------------------------------+
//| sova_2bars.mq4 |
//| Copyright 2020, MetaQuotes Software Corp.
//| https://www.mql5.com |
//+------------------------------------------------------------------+

OrdersTotal() gibt die Gesamtsumme aller Positionen und Aufträge im Metatrader 4 zurück

   for(int i = OrdersTotal() - 1; i >= 0; i--)
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         if(OrderMagicNumber() == iMagicNumber)
            if(OrderSymbol() == Symbol())
              {

               }

Auf diese Weise können Sie Aufträge für ein MedgX und ein Symbol trennen...

 

@MakarFX,danke.... Ich erhalte diese Fehler beim Kompilieren

'CounterOrderTradeType' - Funktion nicht definiert test for many expt trade.mq4 48 19

'CounterOrderTradeType' - Funktionsdeklarationen sind nur auf globaler Ebene, im Namespace oder im Klassenbereich erlaubt test for many expt trade.mq4 141 5


MakarFX
MakarFX
  • www.mql5.com
Добавил тему Окно модификации Доброго времени суток. В терминале, если я дважды щелкаю мышью на линию ордера, то открывается окно модификации. Но если на линии находится цена открытия одного ордера и тейк профит другого, то открывается последний измененный ордер. Уважаемые Профи Добавил тему Нужен индикатор. Кто может написать такое? Я уже...