初心者の方からの質問 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ロットです。問題は、1回(10で買ってTPを10.5にした)ロングポジションを取らずに始めて、2回目(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_);

全ての注文を自分のティーの1つでしてほしい。10でエントリーし、10.5の価格を待ちました。
しかも、1番ティーで全巻はない。

構造で何か調整したほうがいいのでしょうか?

 
ISL:

ごきげんよう
こんな質問があるのですが、状況を明らかにするためにご協力をお願いします。

ロボットネットメーカーは、起動時に指値注文ORDER_TYPE_BUY_LIMIT(上ではORDER_TYPE_BUY_STOPも)のグリッドを配置します。グリッドステップは1、テイク0.5、ボリュームは1ロットです。問題は、1回(10で買ってTPを10.5にした)ロングポジションを取らずに始めて、2回目(9で買ってTPを9.5にした)2ロットになってることです。その後、値段がつき始め、9.5で全数量が取られる!!!!

注文は構造によって行われます。

みんな自分のティーでテイクアウトしてほしい。10でエントリーし、10.5の価格を待ちました。
しかも、1番ティーで全巻はない。

構造的に何か修正する必要があるのでしょうか?

ネッティング」ではなく、「ヘッジ」勘定タイプを使用する。

 
変更するには、再MTして、ヘッジを使うにチェックを入れる必要があります。それとも、既存のものを変更してもいいのでしょうか?
 
ISL:
変更するには、再MTして、ヘッジを使うにチェックを入れる必要があります。それとも、既存のものを変更してもいいのでしょうか?

やり直して、ボックスにチェックを入れる ...

 
ありがとうございました。
 
また同じ質問ですが、ネッティング 口座にこのような持ち出しシステムを導入された方はいらっしゃいますか?もしかしたら、このフォーラムでこれをやったことのある人がいるかもしれません。
 
ISL:
また同じ質問ですが、どなたかこのようなネッティング 口座のTPのシステムを導入された方はいらっしゃいますか?もしかしたら、この掲示板の中にやったことのある人がいるかもしれませんね。

トレーディング、自動売買システム、ストラテジーテストに関するフォーラム

図書館:バーチャル

fxsaber さん 2018.11.15 17:16

ネッティングでは、ポジションは常に1つのTPしか持ちません。そのため、特にネットの各注文が異なるTPを持つネットのTSは、意図したとおりに機能しない。

以下はその例です。

// Пример 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ソース(例ではSystem機能)を変更する必要はありません。

 

午後計算された配列がターミナルを 閉じるまで眠っている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); // 
     }
  }
//+------------------------------------------------------------------+
 
1ヶ月間、アカウントのブロックをお願いします。
理由: