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

 
Vladimir Pastushak:
Wie kann ich den Kontotyp programmatisch verstehen? Hedge oder Netting?
   if(m_account.MarginMode()!=ACCOUNT_MARGIN_MODE_RETAIL_HEDGING)
     {
      Alert("Only Hedging!");
      return(INIT_FAILED);
     }
 

Oder so

AccountInfoSample

   m_label_info[3].Description(m_account.MarginModeDescription());

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

//+------------------------------------------------------------------+
//|                                        MarginModeDescription.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#include <Trade\AccountInfo.mqh>
CAccountInfo      m_account;     // account info wrapper
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   string Pr= m_account.MarginModeDescription();
   Alert(Pr);
  }
//+------------------------------------------------------------------+
 
Bitte helfen Sie mir, einen EA (Skript) zu finden, der entweder ein Raster von virtuellen schwebenden Aufträgen mit bestimmten Parametern erstellt oder Aufträge (einen nach dem anderen) in einer bestimmten Richtung mit einem bestimmten Take öffnet.
 

Bitte sagen Sie mir, wo der Fehler liegt:

      for(int s=OrdersTotal()-1; s>=0; s--)          
         {
           if(o_orderInfo.SelectByIndex(s)) 
           if(o_orderInfo.OrderType()==ORDER_TYPE_SELL_STOP)
             {                 
               count_sell_stop++;
             }
         }  

      for(int s1=PositionsTotal()-1; s1>=0; s1--)          
         {
           if(o_orderInfo.SelectByIndex(s1)) 
           if(o_orderInfo.OrderType()==ORDER_TYPE_SELL)
             {                 
               count_sell++;
             }
         }  
         
      if(count_sell == 0 && count_sell_stop == 0)
         {
            sellstop_req3.action       = TRADE_ACTION_PENDING;
            sellstop_req3.symbol       = _Symbol;
            sellstop_req3.volume       = NormalizeDouble(lot_v, 2);
            sellstop_req3.price        = SymbolInfoDouble(sellstop_req3.symbol, SYMBOL_ASK) - 100*_Point;
            sellstop_req3.sl           = sellstop_req3.price + 110*_Point;
            sellstop_req3.type         = ORDER_TYPE_SELL_STOP;
            sellstop_req3.type_filling = ORDER_FILLING_RETURN;
            sellstop_req3.expiration   = ORDER_TIME_GTC;
            
            OrderSend(sellstop_req3, sellstop_res3);
         }
SELL_STOP - die Aufträge werden berechnet, aber SELL will es nicht. Nach dem Algorithmus wird der Auftrag SELL_STOP erteilt, wenn es keine gibt, und wenn es mindestens einen gibt, wird der Auftrag nicht erteilt.
 
Fergert Фергерт:

Bitte sagen Sie mir, wo der Fehler liegt:

SELL_STOP - Aufträge werden gezählt, aber SELL will nicht. Nach dem Algorithmus wird, wenn keine vorhanden sind, der Auftrag SELL_STOP erteilt, und wenn mindestens einer vorhanden ist, wird kein Auftrag erteilt.

Verwechseln Sie die LOCAL ORDER nicht mit der POSITION.

//+------------------------------------------------------------------+
//|                                                     Script 1.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//---
#include <Trade\PositionInfo.mqh>
#include <Trade\OrderInfo.mqh>
//---
CPositionInfo  m_position;                   // object of CPositionInfo class
COrderInfo     m_order;                      // object of COrderInfo class
//---
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   int count_buys          = 0.0;
   int count_sells         = 0.0;
   int count_buy_limits    = 0.0;
   int count_sell_limits   = 0.0;
   int count_buy_stops     = 0.0;
   int count_sell_stops    = 0.0;
//---
   for(int i=PositionsTotal()-1; i>=0; i--)
      if(m_position.SelectByIndex(i)) // selects the position by index for further access to its properties
        {
         if(m_position.PositionType()==POSITION_TYPE_BUY)
            count_buys++;
         else
            if(m_position.PositionType()==POSITION_TYPE_SELL)
               count_sells++;
        }
//---
   for(int i=OrdersTotal()-1; i>=0; i--) // returns the number of current orders
      if(m_order.SelectByIndex(i)) // selects the pending order by index for further access to its properties
        {
         if(m_order.OrderType()==ORDER_TYPE_BUY_LIMIT)
            count_buy_limits++;
         else
            if(m_order.OrderType()==ORDER_TYPE_SELL_LIMIT)
               count_sell_limits++;
            else
               if(m_order.OrderType()==ORDER_TYPE_BUY_STOP)
                  count_buy_stops++;
               else
                  if(m_order.OrderType()==ORDER_TYPE_SELL_STOP)
                     count_sell_stops++;
        }
//--- you code
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
Dateien:
Script_1.mq5  5 kb
 
Vladimir Karputov:

Verwechseln Sie die FERNBESTELLUNG nicht mit der POSITION.

DANKESCHÖN)) Ich hab's...
 
Ich verstehe nicht, wofür der Parameter begin in der zweiten Variante der Funktion onCalculate zuständig ist.
Jedes Mal, wenn die Funktion onCalculate aufgerufen wird, ist sie gleich 0.
Ich habe den Wert von begin über die Funktion print ausgegeben.
In dem Nachschlagewerk heißt es, dass der Anfang "der Ort ist, an dem die aussagekräftigen Daten beginnen". Das sagt mir gar nichts.
 
MisterRight:
Ich verstehe nicht, wofür der Parameter begin in der zweiten Variante der Funktion onCalculate verantwortlich ist.
Jedes Mal, wenn die Funktion onCalculate aufgerufen wird, ist sie gleich 0.
Ich habe die Ausgabe des Anfangswertes über die Funktion print vorgenommen.
In dem Nachschlagewerk heißt es, dass der Anfang "der Ausgangspunkt für aussagekräftige Daten" ist. Das sagt mir gar nichts.

Sehen Sie sich die Codes der offenen Indikatoren aus dem Beispiel an.

 
Mikhail Mishanin:

Sehen Sie sich die Codes der offenen Indikatoren aus dem Beispiel an.

Ich habe nachgesehen. Beginnt immer = 0.

Hier habe ich einen Teil des Codes aus dem AMA-Indikator

if(Anfang!=0)

PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,ExtPeriodAMA+begin);


Und was soll mir dieser Code sagen, wenn die Bedingung begin!=0 niemals wahr ist?

 
Können Sie mir sagen, wie ich abgeschlossene Aufträge in der Historie zählen kann? Ich habe es folgendermaßen versucht:

HistorySelect(0,TimeCurrent());

Alert("Количество ордеров в истории:  ",HistoryOrdersTotal());
Am Ende gibt es irgendeinen Unsinn heraus, viel mehr als geschlossene Aufträge.