도와 주셔서 감사합니다. 나는 모든 것을 자세히 공부했습니다. 각 거래 요청 후 5초의 지연이 있지만 여전히 도움이 되지 않습니다. 문제는 ICMarkets 데모 MT5 헤지에만 있습니다. 나는 수표를 추가하고 상태 투표의 결과를 표시할 것입니다. 같은 서버에 접속했는데도 제 스스로 문제를 재현할 수 없고 고객이 정기적으로 문제를 가지고 있다는 사실이 상황을 악화시킵니다.
도와 주셔서 감사합니다. 나는 모든 것을 자세히 공부했습니다. 각 거래 요청 후 5초의 지연이 있지만 여전히 도움이 되지 않습니다. 문제는 ICMarkets 데모 MT5 헤지에만 있습니다. 나는 수표를 추가하고 상태 투표의 결과를 표시할 것입니다. 같은 서버에 접속했는데도 제 스스로 문제를 재현할 수 없고 고객이 정기적으로 문제를 가지고 있다는 사실이 상황을 악화시킵니다.
나는 이것이 클라이언트의 연결 품질, 예를 들어 큰 핑과 어떻게 든 관련이 있다고 생각합니다. 실제로 5초의 지연이 있지만 코드에서 이해하는 것처럼 필요한 위치가 아닙니다. m_trade 클래스는 무엇을 반환합니까? 티켓 번호? 아니면 참인가 거짓인가? 이 개체가 반환한 결과를 확인해야 하지만 서버와의 통신 지연으로 인해 긍정적인 응답이 아직 도착하지 않았다고 상상해 보십시오. if 문을 실행한 결과는 어떻게 될까요? 분명히 거짓이며 결과적으로 루프는 5초 안에 두 번째 반복으로 이동합니다. 그리고 이때 드디어 서버에서 응답이 오지만 이미 두 번째 반복이 시작되고 비슷한 위치를 열라는 두 번째 요청이 진행됩니다. 주문 개시 시간에 약간의 델타가 있다는 사실은 두 주문이 차트에서 상쇄된다는 사실에 의해 입증됩니다. 즉, 다른 시간과 다른 가격으로 실행되었음을 의미합니다.
#property copyright"Copyright 2019, MetaQuotes Software Corp."#property link"https://www.mql5.com"#property version"1.00"//---- показывать входные параметры#property script_show_inputs//---#include <Trade\Trade.mqh>
#include <Trade\SymbolInfo.mqh>
CTrade m_trade; // trading object
CSymbolInfo m_symbol; // symbol info object//+------------------------------------------------------------------+//| Enum Stop or Limit |//+------------------------------------------------------------------+enum ENUM_STOP_OR_LIMIT
{
stop= 0 , // Buy stop and Sell stop
limit= 1// Buy limit and Sell limit
};
//--- input parametersinputushort InpUpGap = 15 ; // Gap for pending orders UP from the current price (in points)inputushort InpUpStep = 30 ; // Step between orders UP (in points)inputushort InpDownGap = 15 ; // Gap for pending orders DOWN from the current price (in points)inputushort InpDownStep = 30 ; // Step between orders DOWN (in points)input ENUM_STOP_OR_LIMIT InpPending = stop; // Type of pending ordersinputuchar InpUpQuantity = 1 ; // UP quantity ordersinputuchar InpDownQuantity = 1 ; // DOWN quantity ordersinputdouble InpLots = 0.01 ; // Lotsinputushort InpStopLoss = 50 ; // Stop Loss (in points)inputushort InpTakeProfit = 50 ; // Take Profit (in points)//---ulong m_slippage= 30 ; // slippagedouble ExtUpGap= 0.0 ;
double ExtUpStep= 0.0 ;
double ExtDownGap= 0.0 ;
double ExtDownStep= 0.0 ;
double ExtStopLoss= 0.0 ;
double ExtTakeProfit= 0.0 ;
//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart ()
{
//---if (InpLots<= 0.0 )
{
Print ( "The \"Lots\" can't be smaller or equal to zero" );
return ;
}
//---if (!m_symbol.Name( Symbol ())) // sets symbol namereturn ;
if (!RefreshRates())
return ;
string err_text= "" ;
if (!CheckVolumeValue(InpLots,err_text))
{
Print (err_text);
return ;
}
//---if (IsFillingTypeAllowed( SYMBOL_FILLING_FOK ))
m_trade.SetTypeFilling( ORDER_FILLING_FOK );
elseif (IsFillingTypeAllowed( SYMBOL_FILLING_IOC ))
m_trade.SetTypeFilling( ORDER_FILLING_IOC );
else
m_trade.SetTypeFilling( ORDER_FILLING_RETURN );
//---
m_trade.SetDeviationInPoints(m_slippage);
m_trade.SetAsyncMode( true );
//---
ExtUpGap = m_symbol. Point () * InpUpGap;
ExtUpStep = m_symbol. Point () * InpUpStep;
ExtDownGap = m_symbol. Point () * InpDownGap;
ExtDownStep = m_symbol. Point () * InpDownStep;
ExtStopLoss = m_symbol. Point () * InpStopLoss;
ExtTakeProfit = m_symbol. Point () * InpTakeProfit;
//--- start workdouble start_price_ask=m_symbol.Ask()-ExtUpGap;
double start_price_bid=m_symbol.Bid()+ExtDownGap;
//--- set pending ordersfor ( int i= 0 ; i<InpUpQuantity; i++)
{
double price_ask = start_price_ask+i*ExtUpStep;
double price_bid = start_price_bid+i*ExtUpStep;
if (InpPending==stop)
{
double sl = (ExtStopLoss== 0.0 ) ? 0.0 : price_ask - ExtStopLoss;
double tp = (ExtTakeProfit== 0.0 ) ? 0.0 : price_ask + ExtTakeProfit;
m_trade.BuyStop(InpLots,m_symbol.NormalizePrice(price_ask),m_symbol.Name(),
m_symbol.NormalizePrice(sl),
m_symbol.NormalizePrice(tp));
}
else
{
double sl = (ExtStopLoss== 0.0 ) ? 0.0 : price_bid + ExtStopLoss;
double tp = (ExtTakeProfit== 0.0 ) ? 0.0 : price_bid - ExtTakeProfit;
m_trade.SellLimit(InpLots,m_symbol.NormalizePrice(price_bid),m_symbol.Name(),
m_symbol.NormalizePrice(sl),
m_symbol.NormalizePrice(tp));
}
}
for ( int i= 0 ; i<InpDownQuantity; i++)
{
double price_ask = start_price_ask-i*ExtDownStep;
double price_bid = start_price_bid-i*ExtDownStep;
if (InpPending==limit)
{
double sl = (ExtStopLoss== 0.0 ) ? 0.0 : price_ask - ExtStopLoss;
double tp = (ExtTakeProfit== 0.0 ) ? 0.0 : price_ask + ExtTakeProfit;
m_trade.BuyLimit(InpLots,m_symbol.NormalizePrice(price_ask),m_symbol.Name(),
m_symbol.NormalizePrice(sl),
m_symbol.NormalizePrice(tp));
}
else
{
double sl = (ExtStopLoss== 0.0 ) ? 0.0 : price_bid + ExtStopLoss;
double tp = (ExtTakeProfit== 0.0 ) ? 0.0 : price_bid - ExtTakeProfit;
m_trade.SellStop(InpLots,m_symbol.NormalizePrice(price_bid),m_symbol.Name(),
m_symbol.NormalizePrice(sl),
m_symbol.NormalizePrice(tp));
}
}
}
질문이 생겼습니다.
1. 계획대로 스크립트는 매도호가와 매수호가로부터 특정 거리에 보류 중인 지정가 주문 또는 정지 주문을 배치해야 합니다. 한도 보류 주문 은 문제 없이 설정되지만 스탑 주문은 그렇지 않습니다. 구매 중지 및 판매 중지 보류 주문이 설정되지 않은 이유를 알아내도록 도와주세요.
이 바에서 아직 포지션이 열리지 않았는지 어떻게 확인합니까?
Alexey Vazhmikin의 기능을 약간 수정하고 다음과 같은 방식으로 새 막대에서 위치를 여는 것을 제어하는 구조를 추가할 수 있습니다.
그런 다음 성공적으로 포지션을 열면 Expert Advisor에서 제어 플래그를 올리십시오.
BarOpen.IsPositionOpened= true ;
다음 위치를 열기 전에 제어하십시오. 그래서 더 믿음직스럽겠죠?
두 번째 위치는 첫 번째 직후에 열리며 같은 초에 티켓이 하나씩 다릅니다.
https://www.mql5.com/en/forum/271445
https://www.mql5.com/en/forum/308940
https://www.mql5.com/en/forum/271445
https://www.mql5.com/en/forum/308940
도와 주셔서 감사합니다. 나는 모든 것을 자세히 공부했습니다. 각 거래 요청 후 5초의 지연이 있지만 여전히 도움이 되지 않습니다. 문제는 ICMarkets 데모 MT5 헤지에만 있습니다. 나는 수표를 추가하고 상태 투표의 결과를 표시할 것입니다. 같은 서버에 접속했는데도 제 스스로 문제를 재현할 수 없고 고객이 정기적으로 문제를 가지고 있다는 사실이 상황을 악화시킵니다.
안녕하세요 여러분! 심페로폴에서 온 사람 있나요???
그리고 여전히 MQL5 학습에 도움이 될 것이라고 생각합니다. :) . 다음은 MQL5 프로그래밍을 위한 포럼이지만 데이트 클럽은 아닙니다.
그리고 여전히 MQL5 학습에 도움이 될 것이라고 생각합니다. :) . 다음은 MQL5 프로그래밍을 위한 포럼이지만 데이트 클럽은 아닙니다.
도와 주셔서 감사합니다. 나는 모든 것을 자세히 공부했습니다. 각 거래 요청 후 5초의 지연이 있지만 여전히 도움이 되지 않습니다. 문제는 ICMarkets 데모 MT5 헤지에만 있습니다. 나는 수표를 추가하고 상태 투표의 결과를 표시할 것입니다. 같은 서버에 접속했는데도 제 스스로 문제를 재현할 수 없고 고객이 정기적으로 문제를 가지고 있다는 사실이 상황을 악화시킵니다.
나는 이것이 클라이언트의 연결 품질, 예를 들어 큰 핑과 어떻게 든 관련이 있다고 생각합니다. 실제로 5초의 지연이 있지만 코드에서 이해하는 것처럼 필요한 위치가 아닙니다. m_trade 클래스는 무엇을 반환합니까? 티켓 번호? 아니면 참인가 거짓인가? 이 개체가 반환한 결과를 확인해야 하지만 서버와의 통신 지연으로 인해 긍정적인 응답이 아직 도착하지 않았다고 상상해 보십시오. if 문을 실행한 결과는 어떻게 될까요? 분명히 거짓이며 결과적으로 루프는 5초 안에 두 번째 반복으로 이동합니다. 그리고 이때 드디어 서버에서 응답이 오지만 이미 두 번째 반복이 시작되고 비슷한 위치를 열라는 두 번째 요청이 진행됩니다. 주문 개시 시간에 약간의 델타가 있다는 사실은 두 주문이 차트에서 상쇄된다는 사실에 의해 입증됩니다. 즉, 다른 시간과 다른 가격으로 실행되었음을 의미합니다.
같은 서버에 접속했는데도 제 스스로 문제를 재현할 수 없고 고객이 정기적으로 문제를 가지고 있다는 사실이 상황을 악화시킵니다.
막대에서 기호당 하나의 위치를 확인하십시오. 대부분의 경우 문제를 해결할 수 있습니다.
막대에서 기호당 하나의 위치를 확인하십시오. 대부분의 경우 문제를 해결할 수 있습니다.
또 다른 걸림돌이 있습니다. 이 상황에서는 목발을 발명하는 것보다 MT4 스타일로 다시 작성하는 것이 더 쉽습니다.
모두 좋은 하루!
다음은 Metatrader5에 대한 스크립트 코드의 일부입니다.
질문이 생겼습니다.
1. 계획대로 스크립트는 매도호가와 매수호가로부터 특정 거리에 보류 중인 지정가 주문 또는 정지 주문을 배치해야 합니다. 한도 보류 주문 은 문제 없이 설정되지만 스탑 주문은 그렇지 않습니다. 구매 중지 및 판매 중지 보류 주문이 설정되지 않은 이유를 알아내도록 도와주세요.
2. 마켓이 닫힐 때(예: 주말) 스크립트를 테스트할 수 있는 방법이 있습니까?
안부 인사를 전합니다. 블라디미르.