Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 944

 
eflaer:

Olá, poderia aconselhar-me, por favor, se eu definir a minha EA para, por exemplo, 10 pares de moedas?

Pode definir o número máximo de pares sobre os quais se pode abrir?

Por outras palavras, se o conselheiro estiver definido em 10 gráficos de pares diferentes e nas definições é dito que o número máximo de pares - 5.

E a EA trabalhará apenas nos primeiros 5 pares e os outros 5 pares serão ignorados?

Em geral, é possível?

Se o código estiver em formato .mq, então é possível. Não confundir com .ex

 

Bom dia a todos
Tenho a seguinte pergunta, gostaria de lhe pedir alguma ajuda para esclarecer a situação.

O fabricante de redes robotizadas coloca uma grelha de ordens limite ORDER_TYPE_BUY_LIMIT(também ORDER_TYPE_BUY_STOP para cima) no arranque. O passo da grelha é 1, o take 0,5, e o volume é 1 lote. O problema é que estou a começar a abrir uma posição longa uma vez (comprei a 10 e defini o TP a 10,5) sem tomar a posição, e depois estou a começar a segunda vez (comprei a 9 e defini o TP a 9,5) e tenho 2 lotes. Então o preço começa a entrar e todo o volume é levado para 9,5!

As encomendas são colocadas pela estrutura.

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

Preciso que cada encomenda esteja num dos meus próprios tees. Eu entrei às 10 e esperei por um preço de 10,5.
E não o volume completo no primeiro tee.

Devo ajustar algo com a estrutura?

 
ISL:

Bom dia a todos
Tenho esta pergunta e preciso da vossa ajuda para esclarecer a situação.

O fabricante de redes robotizadas coloca uma grelha de ordens limite ORDER_TYPE_BUY_LIMIT(também ORDER_TYPE_BUY_STOP para cima) no arranque. O passo da grelha é 1, o take 0,5, e o volume é 1 lote. O problema é que estou a começar a abrir uma posição longa (comprei a 10, tomo a 10,5) sem os tomar; estou a começar a segunda vez (comprei a 9, tomo a 9,5) e mudo o volume para 2 lotes. Então o preço começa a entrar e todo o volume é tomado a 9,5!!!

As encomendas são colocadas pela estrutura.

Quero que cada um saia com os seus próprios "tees". Entrei às 10 e esperei pelo preço de 10,5.
E não o volume completo no primeiro tee.

Precisa de consertar algo com a estrutura?

Utilizar contas do tipo "Hedge", e não "Netting".

 
Para o alterar, é necessário voltar a fazer um novo T e assinalar a caixa, Use hedge. Ou posso alterar o existente?
 
ISL:
Para o alterar, é necessário voltar a fazer um novo T e assinalar a caixa, Use hedge. Ou posso alterar o existente?

Refazer e assinalar a caixa ...

 
Obrigado!
 
Mais uma vez com a mesma pergunta, alguém implementou um tal sistema de take-out para uma contaNetting? Talvez haja alguém no fórum que tenha feito isto?
 
ISL:
Faço novamente a mesma pergunta, alguém implementou um sistema de TPs para contasNetting? Talvez haja alguém no fórum que o tenha feito?

Fórum sobre comércio, sistemas de comércio automatizados e testes estratégicos

Bibliotecas: Virtual

fxsaber, 2018.11.15 17:16

Na Netting uma posição tem sempre apenas um TP. Assim, em particular os TS de rede em que cada encomenda na rede tem um TP diferente não funcionará como pretendido.

Abaixo está um exemplo de como 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 - вместе с историей торгов)
}


Esta é uma ideia muito simples. Lançamos o TS num virtual e simplesmente sincronizamo-lo no real. Não é necessário alterar a fonte TP (Função do sistema no exemplo).

 

Tarde. Queria fazer um ficheiro mqh onde as matrizes calculadas ficariam até eu fechar o terminal e voltar a descarregá-las apenas quando houvesse um grande intervalo de tempo (3600 no meu caso). Mas se eu compilar o indicador, o ficheiro mqh também reinicia todas as arrays. Como o posso fazer, para poder fazer tudo com indicador e compilá-lo, mas o ficheiro mqh não é reinicializado até que o terminal seja fechado?

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, bloquear a conta durante um mês.
Razão: