初学者的问题 MQL5 MT5 MetaTrader 5 - 页 944

 
eflaer:

你好,请你告诉我,如果我把我的EA设置为,例如10个货币对?

你能设定你可以开仓的最大数量的交易吗?

换句话说,如果顾问被设置在10个不同货币对的图表上,并且在设置中说,最大的货币对数量 - 5。

EA只对前5个货币对工作,其他5个货币对将被忽略?

一般来说,有可能?

如果代码是.mq格式的,那么就有可能。不要与.ex混淆

 

大家好
我有以下问题,我想请你帮忙澄清一下情况。

机器人织网机在启动时放置一格限价单ORDER_TYPE_BUY_LIMIT(也可以是ORDER_TYPE_BUY_STOP往上)。网格步数为1,取0.5,体积为1手。问题是,我开始开了一次多头头寸(我在10点买入,并将TP设置为10.5)而没有持仓,然后我又开始第二次(我在9点买入,并将TP设置为9.5),我有2手。然后价格开始进入,所有的量都被带到了9.5!

订单是按结构下的。

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

我需要每笔订单都在我自己的一件T恤。我在10点进入,等待10.5的价格。
而不是在第一个发球台的整个音量。

我应该在结构上调整一些东西吗?

 
ISL:

大家好
我有这个问题,我需要你的帮助来澄清情况。

机器人织网机在启动时放置一格限价单ORDER_TYPE_BUY_LIMIT(也可以是ORDER_TYPE_BUY_STOP往上)。网格步数为1,取0.5,体积为1手。问题是,我开始开了一次多头头寸(我在10点买入,并将TP设置为10.5)而没有持仓,然后我又开始第二次(我在9点买入,并将TP设置为9.5),我有2手。然后价格开始进场,所有的成交量都在9.5的时候被拿下!!!。

订单是按结构下的。

我希望每个人都能在自己的发球台前出手。我在10点进入,等待10.5的价格。
而不是在第一个发球台的整个音量。

你需要修复一些结构上的问题吗?

使用 "对冲 "账户类型,而不是 "净额结算"。

 
要改变它,你必须重新进行MT并勾选 "使用对冲"。或者我可以改变现有的吗?
 
ISL:
要改变它,你必须重新进行MT并勾选 "使用对冲"。或者我可以改变现有的吗?

重做,并在方框内打勾......。

 
谢谢你!
 
还是同样的问题,有人为净值 账户实现了这样的取款系统吗?也许论坛上有人做过这种事?
 
ISL:
我又在问同样的问题,有没有人实施这样的净值 账户的TP系统?也许论坛上有谁做过?

关于交易、自动交易系统和策略测试的论坛

图书馆:虚拟

fxsaber, 2018.11.15 17:16

在净价交易中,一个头寸总是只有一个TP。因此,特别是网状结构的TS,如果网状结构中的每个订单都有不同的TP,就不能按预期的那样工作。

下面是一个关于如何工作的例子。

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


这是一个非常简单的想法。我们在一个虚拟的环境中启动TS,并在真实的环境中进行简单的同步。你不需要改变TP源(例子中的系统功能)。

 

下午。我想制作一个mqh文件,计算出的数组会在那里,直到我关闭终端,只有在有很大的时间间隔(在我的例子中是3600)时才重新下载它们。但如果我编译该指标,mqh文件也会重置所有数组。我怎样才能做到,使我可以用指标做所有的事情,并编译它,但mqh文件在终端关闭前不会被重置?

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); // 
     }
  }
//+------------------------------------------------------------------+
 
请封锁该账户一个月。