Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 944

 
eflaer:

Hola, ¿podría aconsejarme si configuro mi EA para, por ejemplo, 10 pares de divisas?

¿Se puede establecer el número máximo de pares en los que se puede abrir?

En otras palabras, si el asesor se establece en 10 gráficos de diferentes pares y en la configuración se dice que el número máximo de pares - 5.

¿Y el EA funcionará sólo en los primeros 5 pares y los otros 5 pares serán ignorados?

En general, ¿es posible?

Si el código está en formato .mq, entonces es posible. No debe confundirse con .ex

 

Buenos días a todos
Tengo la siguiente pregunta, me gustaría pedirles ayuda para aclarar la situación.

El robot netmaker coloca una parrilla de órdenes limitadas ORDER_TYPE_BUY_LIMIT(también ORDER_TYPE_BUY_STOP hacia arriba) al inicio. El paso de rejilla es 1, toma 0,5, y el volumen es 1 lote. El problema es que empiezo a abrir una posición larga una vez (compré a 10 y puse el TP a 10,5) sin tomar la posición, y luego empiezo la segunda vez (compré a 9 y puse el TP a 9,5) y tengo 2 lotes. ¡Entonces el precio empieza a entrar y todo el volumen se lleva a 9,5!

Los pedidos se realizan por la estructura.

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

Necesito que cada pedido sea en uno de mis tees. Entré a 10 y esperé a un precio de 10,5.
Y no todo el volumen en el primer tee.

¿Debo ajustar algo con la estructura?

 
ISL:

Buenos días a todos
Tengo esta pregunta y necesito su ayuda para aclarar la situación.

El robot netmaker coloca una parrilla de órdenes limitadas ORDER_TYPE_BUY_LIMIT(también ORDER_TYPE_BUY_STOP hacia arriba) al inicio. El paso de rejilla es 1, toma 0,5, y el volumen es 1 lote. El problema es que empiezo a abrir una posición larga una vez (compré a 10 y puse el TP a 10,5) sin tomar la posición, y luego empiezo la segunda vez (compré a 9 y puse el TP a 9,5) y tengo 2 lotes. ¡¡¡Entonces el precio empieza a entrar y se lleva todo el volumen a 9,5!!!

Los pedidos se realizan por la estructura.

Quiero que cada uno saque en sus propios tees. Entré a 10 y esperé al precio de 10,5.
Y no todo el volumen en el primer tee.

¿Necesitas arreglar algo de la estructura?

Utilice el tipo de cuenta "Hedge", no "Netting".

 
Para cambiarlo, tienes que volver a hacer el MT y marcar la casilla, Usar cobertura. ¿O puedo cambiar el existente?
 
ISL:
Para cambiarlo, tienes que volver a hacer el MT y marcar la casilla, Usar cobertura. ¿O puedo cambiar el existente?

Vuelve a hacerlo y marca la casilla...

 
Gracias.
 
De nuevo con la misma pregunta, ¿alguien ha implementado este sistema de retirada de fondos para una cuenta deNetting? ¿Quizás haya alguien en el foro que lo haya hecho?
 
ISL:
Vuelvo a preguntar lo mismo, ¿alguien ha implementado un sistema de TPs de este tipo para las cuentas deNetting? ¿Quizás haya alguien en el foro que lo haya hecho?

Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias

Bibliotecas: virtuales

fxsaber, 2018.11.15 17:16

En el Netting una posición siempre tiene un solo TP. Así que, en particular, las TS de red en las que cada orden de la red tiene un TP diferente no funcionarán como se pretende.

A continuación se muestra un ejemplo de cómo funciona.

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


Es una idea muy sencilla. Lanzamos el TS en uno virtual y simplemente lo sincronizamos en el real. No es necesario cambiar la fuente de TP (función Sistema en el ejemplo).

 

Por la tarde. Quería hacer un archivo mqh donde las matrices calculadas quedaran hasta que cierre el terminal y volver a descargarlas sólo cuando haya un gran desfase de tiempo (3600 en mi caso). Pero si compilo el indicador, el archivo mqh también restablece todas las matrices. ¿Cómo puedo hacerlo, para poder hacer todo con el indicador y compilarlo, pero el archivo mqh no se restablece hasta que se cierra el 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); // 
     }
  }
//+------------------------------------------------------------------+
 
Por favor, bloquee la cuenta durante un mes.