초보자의 질문 MQL5 MT5 MetaTrader 5 - 페이지 944

 
eflaer :

안녕하세요, 예를 들어 10 통화 쌍에 고문이 설치되어 있는지 알려주십시오.

그가 열 수 있는 최대 쌍 수를 프로그래밍 방식으로 설정할 수 있습니까?

즉, 고문이 서로 다른 쌍의 차트 10개에 있고 설정에 최대 쌍 수가 5인 것으로 표시되어 있는 경우입니다.

그리고 Advisor는 처음 5개 쌍에서만 작동하고 나머지 5개 쌍은 무시됩니까?

이것이 가능합니까?

코드가 .mq 형식이면 가능합니다. .ex와 혼동하지 마십시오.

 

모두에게 좋은 하루
그런 질문이 있었는데 상황을 명확히 하는 데 조금이나마 도움이 되셨으면 합니다.

그리드 로봇이 시작되면 지정가 ORDER_TYPE_BUY_LIMIT (또한 ORDER_TYPE_BUY_STOP도 맨 위에 있음)의 그리드를 배치합니다. 그리드 1단계, 0.5, 볼륨 1 로트가 필요합니다. 문제는 한 번 롱 포지션을 얻기 시작한다는 것입니다(10을 매수하고 테이크가 10.5가 됨). 나는 두 번째로 갈망합니다 (나는 9시에 샀고 9.5에 가져갔습니다). 볼륨은 이미 2 lot입니다. 그러면 가격이 오르기 시작하고 전체 볼륨이 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_);

그리고 나는 모두가 자신의 테이카에 테이카를 해야 합니다. 10시에 입장, 10.5의 가격을 기다리고
9시에 입장, 가격 9.5. 그리고 첫 번째 테이크의 전체 볼륨이 아닙니다.

구조에 대해 뭔가를 해야 합니까?

 
ISL :

모두에게 좋은 하루
그런 질문이 있었는데 상황을 명확히 하는 데 조금이나마 도움이 되셨으면 합니다.

그리드 로봇이 시작되면 지정가 ORDER_TYPE_BUY_LIMIT (또한 ORDER_TYPE_BUY_STOP도 맨 위에 있음)의 그리드를 배치합니다. 그리드 1단계, 0.5, 볼륨 1 로트가 필요합니다. 문제는 한 번 롱 포지션을 얻기 시작한다는 것입니다(10을 매수하고 테이크가 10.5가 됨). 나는 두 번째로 갈망합니다 (나는 9시에 샀고 9.5에 가져갔습니다). 볼륨은 이미 2 lot입니다. 그러면 가격이 오르기 시작하고 전체 볼륨이 9.5에 찍힙니다!!!

주문은 구조에 의해 배치됩니다.

그리고 나는 모두가 자신의 테이카에 테이카를 해야 합니다. 10시에 입장, 10.5의 가격을 기다리고
9시에 입장, 가격 9.5. 그리고 첫 번째 테이크의 전체 볼륨이 아닙니다.

구조에 대해 뭔가를 해야 합니까?

"상계"가 아닌 "헤지" 계정 유형 사용

 
이를 변경하려면 re-MT를 수행하고 헤지 사용 확인란을 선택해야 합니다. 아니면 기존 것을 변경할 수 있습니까?
 
ISL :
이를 변경하려면 re-MT를 수행하고 헤지 사용 확인란을 선택해야 합니다. 아니면 기존 것을 변경할 수 있습니까?

재확인...

 
고맙습니다!
 
다시 같은 질문으로 Netting 계정에 대해 그러한 테이크 시스템을 구현한 사람이 있습니까? 포럼 어딘가에 이것을 묻는 사람이 있습니까?
 
ISL :
다시 같은 질문으로 Netting 계정에 대해 그러한 테이크 시스템을 구현한 사람이 있습니까? 포럼 어딘가에 이것을 묻는 사람이 있습니까?

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

라이브러리: 가상

fxsaber , 2018.11.15 17:16

Netting에서 위치에는 항상 하나의 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 - вместе с историей торгов)
}


아이디어는 간단합니다. 우리는 가상 차량에서 차량을 출시했지만 실제 차량에서는 동기화만 했습니다. 차량의 소스 코드는 변경할 필요가 없습니다(예시에서 시스템 기능).

 

안녕하세요. 나는 터미널을 닫을 때까지 계산된 배열이 놓일 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); // 
     }
  }
//+------------------------------------------------------------------+
 
한 달 동안 내 계정을 차단해 주세요.
사유: