모두에게 좋은 하루 그런 질문이 있었는데 상황을 명확히 하는 데 조금이나마 도움이 되셨으면 합니다.
그리드 로봇이 시작되면 지정가 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. 그리고 첫 번째 테이크의 전체 볼륨이 아닙니다.
모두에게 좋은 하루 그런 질문이 있었는데 상황을 명확히 하는 데 조금이나마 도움이 되셨으면 합니다.
그리드 로봇이 시작되면 지정가 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. 그리고 첫 번째 테이크의 전체 볼륨이 아닙니다.
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 AskSymbolInfoDouble ( _Symbol , SYMBOL_ASK )
inputint iAmount = 5 ; // Количество ордеров в сеткеinputint iOffset = 120 ; // На каком расстоянии (в пипсах) ставить ордера сеткиinputint iTP = 120 ; // TakeProfit каждого ордера сетки// Выставляем один раз сетку из Amount ордеров на Offset-расстоянии друг от друга с заданным TP.void System( constint Amount, constint Offset, constint TP )
{
staticbool FirstRun = true ;
if (FirstRun)
{
for ( int i = 1 ; i <= Amount; i++)
{
constdouble PriceOpen = Ask - i * Offset * _Point ;
constdouble PriceTP = PriceOpen + TP * _Point ;
OrderSend ( _Symbol , OP_BUYLIMIT , 1 , PriceOpen, 0 , 0 , PriceTP, ( string )i); // Выставляем каждый ордер сетки
}
FirstRun = false ;
}
}
voidOnTick ()
{
staticconstbool Init = VIRTUAL::Select(VIRTUAL::Create()); // Система будет работать в этом виртуальном окруженииstaticconstbool IsVisual = MQLInfoInteger ( MQL_VISUAL_MODE );
staticbool 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 |//+------------------------------------------------------------------+intOnCalculate ( constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//---
ReloadAsk();
//--- return value of prev_calculated for next callreturn (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); //
}
}
//+------------------------------------------------------------------+
안녕하세요, 예를 들어 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에 찍힙니다!!!
주문은 구조에 의해 배치됩니다
그리고 나는 모두가 자신의 테이카에 테이카를 해야 합니다. 10시에 입장, 10.5의 가격을 기다리고
9시에 입장, 가격 9.5. 그리고 첫 번째 테이크의 전체 볼륨이 아닙니다.
구조에 대해 뭔가를 해야 합니까?
모두에게 좋은 하루
그런 질문이 있었는데 상황을 명확히 하는 데 조금이나마 도움이 되셨으면 합니다.
그리드 로봇이 시작되면 지정가 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를 수행하고 헤지 사용 확인란을 선택해야 합니다. 아니면 기존 것을 변경할 수 있습니까?
재확인...
다시 같은 질문으로 Netting 계정에 대해 그러한 테이크 시스템을 구현한 사람이 있습니까? 포럼 어딘가에 이것을 묻는 사람이 있습니까?
거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼
라이브러리: 가상
fxsaber , 2018.11.15 17:16
Netting에서 위치에는 항상 하나의 TP만 있습니다. 따라서 특히 그리드의 각 오더가 고유한 TP를 갖는 그리드 TS는 의도한 대로 작동하지 않습니다.
아래는 작동 방식의 예입니다.
아이디어는 간단합니다. 우리는 가상 차량에서 차량을 출시했지만 실제 차량에서는 동기화만 했습니다. 차량의 소스 코드는 변경할 필요가 없습니다(예시에서 시스템 기능).
안녕하세요. 나는 터미널을 닫을 때까지 계산된 배열이 놓일 mqh 파일을 만들고 큰 시간 간격(내 경우 3600)이 있을 때만 다운로드하고 싶었습니다. 그러나 표시기를 컴파일하면 mqh 파일도 모든 배열을 재설정한다는 것이 밝혀졌습니다. 표시기로 모든 작업을 수행하고 컴파일할 수 있지만 터미널이 닫힐 때까지 mqh 파일이 재설정되지 않도록 하려면 어떻게 해야 합니까?