Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 949

 
Affiche également de manière incorrecte tous les calculs de barres qui sont apparus depuis l'initialisation.....
 

Bonjour à tous !

Voici une partie du code du script pour Metatrader5 :

#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//---- показывать входные параметры
#property script_show_inputs
//---
#include <Trade\Trade.mqh>
#include <Trade\SymbolInfo.mqh>
CTrade         m_trade;                      // trading object
CSymbolInfo    m_symbol;                     // symbol info object
//+------------------------------------------------------------------+
//| Enum Stop or Limit                                               |
//+------------------------------------------------------------------+
enum ENUM_STOP_OR_LIMIT
  {
   stop=0,     // Buy stop and Sell stop
   limit=1     // Buy limit and Sell limit
  };
//--- input parameters
input ushort               InpUpGap          = 15;    // Gap for pending orders UP from the current price (in points)
input ushort               InpUpStep         = 30;    // Step between orders UP (in points)

input ushort               InpDownGap        = 15;    // Gap for pending orders DOWN from the current price (in points)
input ushort               InpDownStep       = 30;    // Step between orders DOWN (in points)

input ENUM_STOP_OR_LIMIT   InpPending        = stop;  // Type of pending orders

input uchar                InpUpQuantity     = 1;     // UP quantity orders
input uchar                InpDownQuantity   = 1;     // DOWN quantity orders

input double               InpLots           = 0.01;  // Lots
input ushort               InpStopLoss       = 50;    // Stop Loss (in points)
input ushort               InpTakeProfit     = 50;    // Take Profit (in points)
//---
ulong                      m_slippage=30;             // slippage

double                     ExtUpGap=0.0;
double                     ExtUpStep=0.0;

double                     ExtDownGap=0.0;
double                     ExtDownStep=0.0;

double                     ExtStopLoss=0.0;
double                     ExtTakeProfit=0.0;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   if(InpLots<=0.0)
     {
      Print("The \"Lots\" can't be smaller or equal to zero");
      return;
     }
//---
   if(!m_symbol.Name(Symbol())) // sets symbol name
      return;
   if(!RefreshRates())
      return;

   string err_text="";
   if(!CheckVolumeValue(InpLots,err_text))
     {
      Print(err_text);
      return;
     }

//---
   if(IsFillingTypeAllowed(SYMBOL_FILLING_FOK))
      m_trade.SetTypeFilling(ORDER_FILLING_FOK);
   else
      if(IsFillingTypeAllowed(SYMBOL_FILLING_IOC))
         m_trade.SetTypeFilling(ORDER_FILLING_IOC);
      else
         m_trade.SetTypeFilling(ORDER_FILLING_RETURN);

//---
   m_trade.SetDeviationInPoints(m_slippage);
   m_trade.SetAsyncMode(true);

//---
   ExtUpGap = m_symbol.Point() * InpUpGap;
   ExtUpStep = m_symbol.Point() * InpUpStep;

   ExtDownGap = m_symbol.Point() * InpDownGap;
   ExtDownStep = m_symbol.Point() * InpDownStep;

   ExtStopLoss = m_symbol.Point() * InpStopLoss;
   ExtTakeProfit = m_symbol.Point() * InpTakeProfit;

//--- start work
   double start_price_ask=m_symbol.Ask()-ExtUpGap;
   double start_price_bid=m_symbol.Bid()+ExtDownGap;

//--- set pending orders
   for(int i=0; i<InpUpQuantity; i++)
     {
      double price_ask = start_price_ask+i*ExtUpStep;
      double price_bid = start_price_bid+i*ExtUpStep;
      if(InpPending==stop)
        {
         double sl = (ExtStopLoss==0.0)   ? 0.0 : price_ask - ExtStopLoss;
         double tp = (ExtTakeProfit==0.0) ? 0.0 : price_ask + ExtTakeProfit;
         m_trade.BuyStop(InpLots,m_symbol.NormalizePrice(price_ask),m_symbol.Name(),
         m_symbol.NormalizePrice(sl),
         m_symbol.NormalizePrice(tp));
        }
      else
        {
         double sl = (ExtStopLoss==0.0)   ? 0.0 : price_bid + ExtStopLoss;
         double tp = (ExtTakeProfit==0.0) ? 0.0 : price_bid - ExtTakeProfit;
         m_trade.SellLimit(InpLots,m_symbol.NormalizePrice(price_bid),m_symbol.Name(),
         m_symbol.NormalizePrice(sl),
         m_symbol.NormalizePrice(tp));
        }
     }

   for(int i=0; i<InpDownQuantity; i++)
     {
      double price_ask = start_price_ask-i*ExtDownStep;
      double price_bid = start_price_bid-i*ExtDownStep;
      if(InpPending==limit)
        {
         double sl = (ExtStopLoss==0.0)   ? 0.0 : price_ask - ExtStopLoss;
         double tp = (ExtTakeProfit==0.0) ? 0.0 : price_ask + ExtTakeProfit;
         m_trade.BuyLimit(m_symbol.LotsMin(),m_symbol.NormalizePrice(price_ask),m_symbol.Name(),
         m_symbol.NormalizePrice(sl),
         m_symbol.NormalizePrice(tp));
        }
      else
        {
         double sl = (ExtStopLoss==0.0)   ? 0.0 : price_bid + ExtStopLoss;
         double tp = (ExtTakeProfit==0.0) ? 0.0 : price_bid - ExtTakeProfit;
         m_trade.SellStop(m_symbol.LotsMin(),m_symbol.NormalizePrice(price_bid),m_symbol.Name(),
         m_symbol.NormalizePrice(sl),
         m_symbol.NormalizePrice(tp));
        }
     }
  }

Le script est censé définir soit des ordres à cours limité à une certaine distance du ask et du bid, soit des ordres stop. Les ordres limitésen attente sont définis sans problème, mais pas les ordres stop. Je ne sais pas pourquoi les ordres en attente Sell Stop et Buy Stop ne sont pas définis.

Cordialement, Vladimir.

 
Salut les gars. A fait beaucoup d'écriture à côté d'une commande ouverte.
        for(int no1=0; no1<OrdersTotal(); no1++){
     if(OrderSelect(no1,SELECT_BY_POS,MODE_TRADES)){
     if(OrderSymbol()==Symbol() && OrderType()== OP_BUY){
     ObjectCreate("LOTB"+OrderTicket(),OBJ_TEXT,0,TimeCurrent(),OrderOpenPrice());
    ObjectSetText("LOTB"+OrderTicket(),OrderLots()*100,20,"Arial",clrWheat);   
    ObjectSetInteger(0,"LOTB"+OrderTicket(),OBJPROP_ANCHOR,ANCHOR_RIGHT_UPPER);  }}} 
Pouvez-vous me dire comment prendre le dernier texte et cette liste ?
 
Rustam Bikbulatov:
Salut les gars. A fait beaucoup d'écriture à côté d'une commande ouverte. Pouvez-vous me dire comment prendre le dernier texte et cette liste ?
 
Yevhenii Levchenko:

Vous devez d'abord trouver tous les textes et utiliser cette fonction pour calculer à partir de ceux-ci ?

 
Rustam Bikbulatov:

Vous devez d'abord trouver tous les textes et utiliser cette fonction pour calculer à partir de ceux-ci ?

Je n'ai pas de connaissances approfondies à ce sujet, car j'apprends moi-même le langage mql4 depuis peu. Vous pouvez tout trouver dans l'aide. Avez-vous besoin de l'ensemble du texte de l'objet ou d'un fragment ?
 
Yevhenii Levchenko:
Je n'ai pas de connaissances approfondies à ce sujet, car je suis moi-même un nouvel apprenant de la langue mql4. L'aide est là. Avez-vous besoin de l'ensemble du texte de l'objet ou d'un morceau de celui-ci ?

J'ai besoin de ce qui a été écrit la dernière fois

 
Salut les gars. A fait beaucoup d'écriture à côté d'une commande ouverte.
        for(int no1=0; no1<OrdersTotal(); no1++){
     if(OrderSelect(no1,SELECT_BY_POS,MODE_TRADES)){
     if(OrderSymbol()==Symbol() && OrderType()== OP_BUY){
     ObjectCreate("LOTB"+OrderTicket(),OBJ_TEXT,0,TimeCurrent(),OrderOpenPrice());
    ObjectSetText("LOTB"+OrderTicket(),OrderLots()*100,20,"Arial",clrWheat);   
    ObjectSetInteger(0,"LOTB"+OrderTicket(),OBJPROP_ANCHOR,ANCHOR_RIGHT_UPPER);  }}} 
Pouvez-vous me dire comment prendre le dernier texte et cette liste ?
 
Rustam Bikbulatov:
Salut les gars. A fait beaucoup d'écriture à côté d'une commande ouverte. Pouvez-vous me dire comment prendre le dernier texte et cette liste ?

De quelle liste ?

Et veuillez utiliser le stylet dans l'éditeur (Ctrl+<) :

for(int no1=0; no1<OrdersTotal(); no1++)
  {
   if(OrderSelect(no1,SELECT_BY_POS,MODE_TRADES))
     {
      if(OrderSymbol()==Symbol() && OrderType()== OP_BUY)
        {
         ObjectCreate("LOTB"+OrderTicket(),OBJ_TEXT,0,TimeCurrent(),OrderOpenPrice());
         ObjectSetText("LOTB"+OrderTicket(),OrderLots()*100,20,"Arial",clrWheat);
         ObjectSetInteger(0,"LOTB"+OrderTicket(),OBJPROP_ANCHOR,ANCHOR_RIGHT_UPPER);
        }
     }
  } 
//+------------------------------------------------------------------+

Qu'est-ce qui doit être prélevé sur quoi ?

 
Artyom Trishkin:

De quelle liste ?

Et veuillez utiliser le stylet dans l'éditeur (Ctrl+<) :

Où puis-je l'obtenir ?

Cette fonction écrit un numéro sur chaque commande ou plus précisément un lot*100.

Nous avons maintenant besoin d'une fonction inverse qui montre quel était le dernier nombre.