Questions des débutants MQL5 MT5 MetaTrader 5 - page 944

 
eflaer:

Bonjour, Pourriez-vous me conseiller si je règle mon EA sur, par exemple, 10 paires de devises ?

Pouvez-vous fixer le nombre maximum de paires sur lesquelles vous pouvez ouvrir ?

En d'autres termes, si le conseiller est configuré sur 10 graphiques de différentes paires et que dans les paramètres il est dit que le nombre maximum de paires - 5.

Et l'EA ne fonctionnera que sur les 5 premières paires et les 5 autres paires seront ignorées ?

En général, c'est possible ?

Si le code est au format .mq, c'est possible. A ne pas confondre avec .ex

 

Bonne journée à tous
J'ai la question suivante, je voudrais vous demander de m'aider à clarifier la situation.

Le robot netmaker place une grille d'ordres à cours limité ORDER_TYPE_BUY_LIMIT(également ORDER_TYPE_BUY_STOP vers le haut) au démarrage. Le pas de grille est de 1, la prise de 0,5, et le volume est de 1 lot. Le problème est que je commence à ouvrir une position longue une fois (j'ai acheté à 10 et fixé le TP à 10,5) sans prendre la position, puis je commence la deuxième fois (j'ai acheté à 9 et fixé le TP à 9,5) et j'ai 2 lots. Puis le prix commence à rentrer et tout le volume est pris à 9.5 !

Les commandes sont passées par la structure.

      MqlTradeRequest request_={0};
      request_.action=TRADE_ACTION_PENDING;         // установка отложенного ордера 
      request_.magic=order_magic;                  // ORDER_MAGIC 
      request_.symbol=pair;                      // инструмент 
      request_.volume=v_b;                          // объем в 0.1 лот 
      request_.tp=pr_ent_tp;                                // Take Profit 
      //--- сформируем тип ордера 
      request_.type=ORDER_TYPE_BUY_LIMIT;                // тип ордера 
      //---сформируем цену для отложенного ордера 
      request_.price=pr_ent;  // цена для открытия 
      //--- отправим торговый приказ 
      MqlTradeResult result_={0};
      m_Trade.OrderSend(request_,result_);

J'ai besoin que chaque commande soit à un de mes propres tees. Je suis entré à 10 et j'ai attendu un prix de 10,5.
Et pas tout le volume au premier tee.

Je devrais ajuster quelque chose à la structure ?

 
ISL:

Bonne journée à tous
J'ai cette question et j'ai besoin de votre aide pour clarifier la situation.

Le robot netmaker place une grille d'ordres à cours limité ORDER_TYPE_BUY_LIMIT(également ORDER_TYPE_BUY_STOP vers le haut) au démarrage. Le pas de grille est de 1, la prise de 0,5, et le volume est de 1 lot. Le problème est que je commence à ouvrir une position longue une fois (j'ai acheté à 10 et fixé le TP à 10,5) sans prendre la position, puis je commence la deuxième fois (j'ai acheté à 9 et fixé le TP à 9,5) et j'ai 2 lots. Puis le prix commence à rentrer et tout le volume est pris à 9.5 !

Les commandes sont passées par la structure.

J'ai besoin que tout le monde sorte à son propre tee. Je suis entré à 10 et j'ai attendu le prix de 10,5.
Et pas tout le volume au premier tee.

Avez-vous besoin de réparer quelque chose dans la structure ?

Utilisez le type de compte "Hedge", et non "Netting".

 
Pour le changer, il faut refaire un MT et cocher la case "Utiliser la couverture". Ou puis-je modifier celui qui existe déjà ?
 
ISL:
Pour le changer, il faut refaire un MT et cocher la case "Utiliser la couverture". Ou puis-je modifier celui qui existe déjà ?

Refaites-le et cochez la case ...

 
Merci !
 
Toujours avec la même question, est-ce que quelqu'un a mis en place un tel système d'enlèvement pour un compteNetting? Peut-être y a-t-il quelqu'un sur le forum qui a fait cela ?
 
ISL:
Je pose à nouveau la même question, quelqu'un a-t-il mis en place un tel système de TPs pour les comptesNetting? Peut-être y a-t-il quelqu'un sur le forum qui l'a fait ?

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie

Bibliothèques : virtuelles

fxsaber, 2018.11.15 17:16

Sur Netting, une position n'a toujours qu'un seul TP. Ainsi, en particulier, les TS de compensation où chaque ordre de la compensation a un TP différent ne fonctionneront pas comme prévu.

Vous trouverez ci-dessous un exemple de son fonctionnement.

// Пример Netting с поддержкой множества однонаправленных позиций (у каждой могут быть свои Magic, SL/TP, Comment, OpenTime и т.д.).
// Запустите этот пример на Netting-счете в Тестере с влюченной Визуализацией.

#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

#define  VIRTUAL_LIMITS_TP_SLIPPAGE // Лимитники и TP исполняются по первой цене акцепта - положительные проскальзывания
#include <fxsaber\Virtual\Virtual.mqh> // https://www.mql5.com/ru/code/22577
#include <fxsaber\Virtual\Sync.mqh>    // Синхронизатор

#define Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

input int iAmount = 5;   // Количество ордеров в сетке
input int iOffset = 120; // На каком расстоянии (в пипсах) ставить ордера сетки
input int iTP = 120;     // TakeProfit каждого ордера сетки

// Выставляем один раз сетку из Amount ордеров на Offset-расстоянии друг от друга с заданным TP.
void System( const int Amount, const int Offset, const int TP )
{
  static bool FirstRun = true;
  
  if (FirstRun)  
  {
    for (int i = 1; i <= Amount; i++)
    {
      const double PriceOpen = Ask - i * Offset * _Point;
      const double PriceTP = PriceOpen + TP * _Point;
      
      OrderSend(_Symbol, OP_BUYLIMIT, 1, PriceOpen, 0, 0, PriceTP, (string)i); // Выставляем каждый ордер сетки
    }
    
    FirstRun = false;
  }
}

void OnTick()
{  
  static const bool Init = VIRTUAL::Select(VIRTUAL::Create()); // Система будет работать в этом виртуальном окружении
  static const bool IsVisual = MQLInfoInteger(MQL_VISUAL_MODE);
  static bool FirstRun = true;

  VIRTUAL::NewTick();            // Добавили тик в виртуальное торговое окружение
  System(iAmount, iOffset, iTP); // Запустили ТС на выбранном торговом окружении (виртуальное)
  
  SYNC::Positions<ISTIME>(); // Синхронизировли реальное торговое окружение с виртуальным

  if (IsVisual)
    Comment(VIRTUAL::ToString(true)); // Вывели на чарт состояние виртуального торгового окружения (true - вместе с историей торгов)
}


C'est une idée très simple. Nous lançons le TS dans un virtuel et le synchronisons simplement dans le réel. Il n'est pas nécessaire de modifier la source du TP (fonction Système dans l'exemple).

 

Après-midi. Je voulais créer un fichier mqh où les tableaux calculés resteraient jusqu'à ce que je ferme le terminal et où je ne les rechargerais que lorsqu'il y aurait un grand écart de temps (3600 dans mon cas). Mais si je compile l'indicateur, le fichier mqh réinitialise également tous les tableaux. Comment faire, pour que je puisse tout faire avec l'indicateur et le compiler, mais que le fichier mqh ne soit pas réinitialisé avant la fermeture du terminal ?

class CMyTicks
  {
protected:
   int               countTicks;

public:
   datetime          m_TickTime[];
   datetime          m_FirstTickTime;
   //+------------------------------------------------------------------+
   //| Constructor.                                                     |
   //+------------------------------------------------------------------+      
   void CMyTicks()
     {
      countTicks=0;
     }
   //+------------------------------------------------------------------+  
   void CollectTicks(int m_getticks=1000)
     {
      MqlTick           items[];
      int received=CopyTicks(_Symbol,items,COPY_TICKS_ALL,0,m_getticks);
      
      ...
      m_FirstTickTime=items[0].time;
     }
  };
//+------------------------------------------------------------------+
#include <Test_Array_Include.mqh>
CMyTicks  Test;
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   ReloadAsk();
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
int      getticks=100000;
datetime firstticktime=0;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void ReloadAsk()
  {
   MqlTick           items[];
   int received=CopyTicks(_Symbol,items,COPY_TICKS_ALL,0,getticks);
   firstticktime=items[0].time;

   if((int)firstticktime>(int)Test.m_FirstTickTime+3600)
     {
      Test.CollectTicks(getticks);
      int ArrSize=ArraySize(Test.m_TickTime);
      Print(" Should not apear after compilation. ArrSize: ",ArrSize); // 
     }
  }
//+------------------------------------------------------------------+
 
Veuillez bloquer le compte pendant un mois.
Raison: