Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 944

 
eflaer:

Ciao, Potresti consigliarmi se imposto il mio EA su, per esempio, 10 coppie di valute?

È possibile impostare il numero massimo di coppie su cui si può aprire?

In altre parole, se l'advisor è impostato su 10 grafici di diverse coppie e nelle impostazioni si dice che il numero massimo di coppie - 5.

E l'EA lavorerà solo sulle prime 5 coppie e le altre 5 coppie saranno ignorate?

In generale, è possibile?

Se il codice è in formato .mq, allora è possibile. Da non confondere con .ex

 

Buona giornata a tutti
Ho la seguente domanda, vorrei chiedervi un aiuto per chiarire la situazione.

Il robot netmaker piazza una griglia di ordini limite ORDER_TYPE_BUY_LIMIT(anche ORDER_TYPE_BUY_STOP verso l'alto) all'avvio. Il passo della griglia è 1, prendere 0,5, e il volume è 1 lotto. Il problema è che sto iniziando ad aprire una posizione lunga una volta (ho comprato a 10 e impostato il TP a 10.5) senza prendere la posizione, e poi sto iniziando la seconda volta (ho comprato a 9 e impostato il TP a 9.5) e ho 2 lotti. Poi il prezzo inizia a entrare e tutto il volume viene portato a 9,5!

Gli ordini vengono effettuati dalla struttura.

      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_);

Ho bisogno che ogni ordine sia a una delle mie tee. Sono entrato a 10 e ho aspettato un prezzo di 10,5.
E non l'intero volume al primo tee.

Dovrei aggiustare qualcosa con la struttura?

 
ISL:

Buona giornata a tutti
Ho questa domanda e ho bisogno del vostro aiuto per chiarire la situazione.

Il robot netmaker piazza una griglia di ordini limite ORDER_TYPE_BUY_LIMIT(anche ORDER_TYPE_BUY_STOP verso l'alto) all'avvio. Il passo della griglia è 1, prendere 0,5, e il volume è 1 lotto. Il problema è che sto iniziando ad aprire una posizione lunga una volta (ho comprato a 10 e impostato il TP a 10.5) senza prendere la posizione, e poi sto iniziando la seconda volta (ho comprato a 9 e impostato il TP a 9.5) e ho 2 lotti. Poi il prezzo inizia a entrare e tutto il volume viene portato a 9,5!

Gli ordini vengono effettuati dalla struttura.

Ho bisogno che ognuno prenda il proprio tee. Sono entrato a 10 e ho aspettato il prezzo di 10,5.
E non tutto il volume al primo tee.

Hai bisogno di aggiustare qualcosa nella struttura?

Usare il tipo di conto "Hedge", non "Netting".

 
Per cambiarlo, devi ri-MT e spuntare la casella, Use hedge. O posso cambiare quello esistente?
 
ISL:
Per cambiarlo, devi ri-MT e spuntare la casella, Use hedge. O posso cambiare quello esistente?

Rifallo e spunta la casella ...

 
Grazie!
 
Sempre con la stessa domanda, qualcuno ha implementato un tale sistema di prelievo per un contoNetting? Forse c'è qualcuno nel forum che ha fatto questo?
 
ISL:
Faccio di nuovo la stessa domanda, qualcuno ha implementato un tale sistema di TP per i contiNetting? Forse c'è qualcuno nel forum che l'ha fatto?

Forum sul trading, sistemi di trading automatico e test di strategia

Biblioteche: virtuale

fxsaber, 2018.11.15 17:16

Su Netting una posizione ha sempre un solo TP. Quindi, in particolare, i TS netting in cui ogni ordine nel netting ha un TP diverso non funzioneranno come previsto.

Ecco un esempio di come funziona.

// Пример 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 - вместе с историей торгов)
}


Questa è un'idea molto semplice. Lanciamo TS in uno virtuale e lo sincronizziamo semplicemente in quello reale. Non è necessario cambiare la fonte TP (funzione System nell'esempio).

 

Pomeriggio. Volevo fare un file mqh dove le matrici calcolate staranno fino a quando non chiuderò il terminale e le riscaricherò solo quando ci sarà un grande intervallo di tempo (3600 nel mio caso). Ma se compilo l'indicatore, il file mqh resetta anche tutti gli array. Come posso fare, così posso fare tutto con l'indicatore e compilarlo, ma il file mqh non viene resettato fino alla chiusura del terminale?

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); // 
     }
  }
//+------------------------------------------------------------------+
 
Si prega di bloccare l'account per un mese.