OrderSend를 사용하여 MT5에서 올바르게 작동하는 방법 - 페이지 9 12345678910111213 새 코멘트 fxsaber 2016.11.14 20:46 #81 prostotrader : https://www.mql5.com/ru/forum/97557/page4#comment_2891988 거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼 OrderSend를 사용하여 MT5에서 올바르게 작동하는 방법 fxsaber , 2016.11.14 20:20 이것은 스크립트 의 문제입니다. Документация по MQL5: Программы MQL5 / Выполнение программ www.mql5.com Программы MQL5 / Выполнение программ - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5 prostotrader 2016.11.14 20:48 #82 fxsaber : 죄송하지만 스크립트를 처리하고 싶은 마음은 없습니다. 추가됨 하지만 탈출구가 있다 OrderrSend() 함수는 동기식이므로 주문을 수신하면 기록이 OnTradeTransaction() 에서 동기화되었는지 확인하십시오. //+------------------------------------------------------------------+ // Expert TradeTransaction function | //+------------------------------------------------------------------+ void OnTradeTransaction ( const MqlTradeTransaction &trans, const MqlTradeRequest &request, const MqlTradeResult &result) { switch (trans.type) { case TRADE_TRANSACTION_ORDER_UPDATE : switch (trans.order_state) { case ORDER_STATE_PLACED : if (order_ticket==trans.order) { Print ( __FUNCTION__ , " Order plased done. Ticket = " ,trans.order); if (order_ticket> 0 ) { if ( OrderSelect (order_ticket)) { //Ордер синхронизирован с историей } else { Print ( __FUNCTION__ , " Order not select! Ticket = " ,trans.order); } } else { Print ( __FUNCTION__ , " Wrong order ticket = " ,trans.order); } } break ; } break ; } } 그리고 춤은 추지 않는다! How to work correctly How do I open OnTradeTransaction fxsaber 2016.11.15 12:04 #83 prostotrader : 그리고 춤은 추지 않는다! 거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼 OrderSend를 사용하여 MT5에서 올바르게 작동하는 방법 fxsaber , 2016.11.10 10:00 이것은 스크립트이며 어떤 이벤트도 있을 수 없습니다 . 유일한 탈출구는 바보 수면입니다. SB를 사용하여 이 스크립트를 다시 작성하면 아무 것도 변경되지 않습니다. prostotrader 2016.11.15 12:11 #84 fxsaber : 원하는대로 수면 을 왜곡시킬 수 있습니다.... fxsaber 2016.11.15 12:30 #85 prostotrader : 원하는대로 수면을 왜곡시킬 수 있습니다.... 그들 자신이 이미 제안한 것과 그 이전에 다른 사람들이 말한 것을 왜 반복합니까? 스레드는 OnTradeTransaction의 가능한 문제에 대한 모든 것을 말합니다. 특히 동시에 여러 고문의 작업에 대해. 사람들은 목발을 만듭니다. 문서를 모르고 기능을 사용하는 방법을 모른다는 의미는 아닙니다. OnTrade와 OnTradeTransaction은 정확히 그들이 한 일입니다. 그리고 그것이 탄생했을 때 개발자들은 계정에 두 명 이상의 고문과 동시에 작업하는 것이 어리석은 일이라고 믿었습니다. 글쎄, 그들은이 점수에서 틀렸습니다. 누구와도 일어나지 않습니다. EA에서 다음 함수 를 작성해 보세요. 나는 = 0. 기호[i]에서 포지션을 엽니다. i++ >= 5인 경우 - 종료합니다. 새 위치에 미끄러짐이 없으면 2단계로 돌아갑니다. 미끄러짐이 있으면 퇴장합니다. Mt4 지원 종료. 오류, 버그, 질문 [ARCHIVE!] 포럼을 어지럽히 지 prostotrader 2016.11.15 12:36 #86 fxsaber : 그들 자신이 이미 제안한 것과 그 이전에 다른 사람들이 말한 것을 왜 반복합니까? 스레드는 OnTradeTransaction의 가능한 문제에 대한 모든 것을 말합니다. 특히 동시에 여러 고문의 작업에 대해. 사람들은 목발을 만듭니다. 문서를 모르고 기능을 사용하는 방법을 모른다는 의미는 아닙니다. OnTrade와 OnTradeTransaction은 정확히 그들이 한 일입니다. 그리고 그것이 탄생했을 때 개발자들은 계정에 두 명 이상의 고문과 동시에 작업하는 것이 어리석은 일이라고 믿었습니다. 글쎄, 그들은이 점수에서 틀렸습니다. 누구와도 일어나지 않습니다. EA에서 다음 함수 를 작성해 보세요. 나는 = 0. 기호[i]에서 포지션을 엽니다. i++ >= 5인 경우 - 종료합니다. 새 위치에 미끄러짐이 없으면 2단계로 돌아갑니다. 미끄러짐이 있으면 퇴장합니다. 현재 저는 41명의 Expert Advisors가 실생활에서(하나의 터미널에서) 일하고 있으며, 이는 총 거래일입니다. 2000개 주문을 오픈 포지션과 클로즈 포지션으로 설정했는데 전혀 어려움을 겪지 않았습니다! 추가됨 '그렇게 필요하다'는 것이 아니라 있는 기능부터 진행해야 한다. 개발자는 가능한 경우 희망 사항을 고려하여 오류를 수정하고 단점을 제거합니다. (매우 느리지만). OederSend()가 곧 해결될 것 같습니다. fxsaber 2016.11.15 13:14 #87 prostotrader : 현재 저는 41명의 Expert Advisors가 실생활에서(하나의 터미널에서) 일하고 있으며, 이는 총 거래일입니다. 2000개 주문을 오픈 포지션과 클로즈 포지션으로 설정했는데 전혀 어려움을 겪지 않았습니다! 주제에서 벗어나라고 합니다. 가장 단순한 논리라도 거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼 OrderSend를 사용하여 MT5에서 올바르게 작동하는 방법 fxsaber , 2016.11.15 13:30 EA에서 다음 함수 를 작성해 보세요. 나는 = 0. 기호[i]에서 포지션을 엽니다. i++ >= 5인 경우 - 종료합니다. 새 위치에 미끄러짐이 없으면 2단계로 돌아갑니다. 미끄러짐이 있으면 퇴장합니다. 누가 당장 시행해 // MQL4&5-code #property strict #include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006 void Func( const string &Symbols[] ){ const int Total = ArraySize (Symbols); for ( int i = 0 ; i < Total; i++) { const double Price = SymbolInfoDouble (Symbols[i], SYMBOL_ASK ); const int digits = ( int ) SymbolInfoInteger (Symbols[i], SYMBOL_DIGITS ); if (! OrderSelect ( OrderSend (Symbols[i], OP_BUY , 1 , Price, 100 , 0 , 0 , DoubleToString (Price, digits)), SELECT_BY_TICKET ) || ( NormalizeDouble (Price - OrderOpenPrice (), digits) != 0 )) // если не получилось открыть или есть проскальзывание - выходим break ; }} void OnStart () // OnTick { const string Symbols[] = { "EURUSD" , "GBPUSD" , "AUDUSD" , "USDCAD" , "USDJPY" }; Func(Symbols);} 그리고 누군가는 개발자들의 천상의 마력을 기다리고 있습니다. 시장가 주문을 올바르게 여는 How do I open How to work correctly prostotrader 2016.11.15 19:18 #88 나는 이미 당신이 원하는 대로 변태할 권리가 있다고 말했습니다(모든 사람이 이 권리를 가집니다). Denis Sartakov 2016.11.17 18:26 #89 prostotrader : 나는 이미 당신이 원하는 대로 변태할 권리가 있다고 말했습니다(모든 사람이 이 권리를 가집니다). 오래 전 일이지만 이 사람을 기억합니다. 음, 이 사람 - fxsaber 는 놀라운 일을 했습니다. 지금까지 해당 코드는 MT4 코드베이스에 저장되어 있으며 WinInet을 통해 사이트를 읽기 위한 코드입니다. 오늘날까지 많은 프로그래머가 사용... 따라서 그는 변태가 아닌 것 같습니다 ... fxsaber 2016.11.19 22:59 #90 여기 라이브러리에서 동기화된 OrderSendSync 를 제거했습니다. uint OrderSend_MaxPause = 1000000 ; // максимальное время на синхронизацию в мкс. const bool IsTester = (:: MQLInfoInteger ( MQL_TESTER ) || :: MQLInfoInteger ( MQL_OPTIMIZATION ) || :: MQLInfoInteger ( MQL_VISUAL_MODE ) || :: MQLInfoInteger ( MQL_FRAME_MODE )); bool Waiting( const bool FlagInit = false ){ static ulong StartTime = 0 ; if (FlagInit) StartTime = :: GetMicrosecondCount (); const bool Res = (:: GetMicrosecondCount () - StartTime < OrderSend_MaxPause); if (Res) :: Sleep ( 0 ); return (Res);} bool EqualPrices( const double Price1, const double Price2, const int digits){ return (:: NormalizeDouble (Price1 - Price2, digits) == 0 );} #define WHILE(A) while (!(Res = (A)) && Waiting()) bool OrderSendSync ( const MqlTradeRequest &Request, MqlTradeResult &Result ){ bool Res = :: OrderSend (Request, Result); if (Res && !IsTester && (Result.retcode < TRADE_RETCODE_ERROR ) && (OrderSend_MaxPause > 0 )) { Res = (Result.retcode == TRADE_RETCODE_DONE ); Waiting( true ); if (Request.action == TRADE_ACTION_DEAL ) { WHILE(:: HistoryOrderSelect (Result.order)) ; Res = Res && ((( ENUM_ORDER_STATE ):: HistoryOrderGetInteger (Result.order, ORDER_STATE ) == ORDER_STATE_FILLED ) || (( ENUM_ORDER_STATE ):: HistoryOrderGetInteger (Result.order, ORDER_STATE ) == ORDER_STATE_PARTIAL )); if (Res) WHILE(:: HistoryDealSelect (Result.deal)) ; } else if (Request.action == TRADE_ACTION_PENDING ) { if (Res) WHILE(:: OrderSelect (Result.order)) ; else { WHILE(:: HistoryOrderSelect (Result.order)) ; Res = false ; } } else if (Request.action == TRADE_ACTION_SLTP ) { if (Res) { bool EqualSL = false ; bool EqualTP = false ; const int digits = ( int ):: SymbolInfoInteger (Request.symbol, SYMBOL_DIGITS ); if ((Request.position == 0 ) ? :: PositionSelect (Request.symbol) : :: PositionSelectByTicket (Request.position)) { EqualSL = EqualPrices(:: PositionGetDouble ( POSITION_SL ), Request.sl, digits); EqualTP = EqualPrices(:: PositionGetDouble ( POSITION_TP ), Request.tp, digits); } WHILE((EqualSL && EqualTP)) if ((Request.position == 0 ) ? :: PositionSelect (Request.symbol) : :: PositionSelectByTicket (Request.position)) { EqualSL = EqualPrices(:: PositionGetDouble ( POSITION_SL ), Request.sl, digits); EqualTP = EqualPrices(:: PositionGetDouble ( POSITION_TP ), Request.tp, digits); } } } else if (Request.action == TRADE_ACTION_MODIFY ) { if (Res) { bool EqualSL = false ; bool EqualTP = false ; const int digits = ( int ):: SymbolInfoInteger (Request.symbol, SYMBOL_DIGITS ); if (:: OrderSelect (Result.order)) { EqualSL = EqualPrices(:: OrderGetDouble ( ORDER_SL ), Request.sl, digits); EqualTP = EqualPrices(:: OrderGetDouble ( ORDER_TP ), Request.tp, digits); } WHILE((EqualSL && EqualTP)) if (:: OrderSelect (Result.order)) { EqualSL = EqualPrices(:: OrderGetDouble ( ORDER_SL ), Request.sl, digits); EqualTP = EqualPrices(:: OrderGetDouble ( ORDER_TP ), Request.tp, digits); } } } else if (Request.action == TRADE_ACTION_REMOVE ) if (Res) WHILE(:: HistoryOrderSelect (Result.order)) ; } return (Res);} #undef WHILE 코드 이면의 아이디어는 명확해야 합니다. 아마도 무언가가 고려되지 않았을 것입니다. 나는 내 작업에서 어떤 오류도 발견하지 못했습니다. How to work correctly MetaEditor build 1490 메타에디터 빌드 1490 12345678910111213 새 코멘트 트레이딩 기회를 놓치고 있어요: 무료 트레이딩 앱 복사용 8,000 이상의 시그널 금융 시장 개척을 위한 경제 뉴스 등록 로그인 공백없는 라틴 문자 비밀번호가 이 이메일로 전송될 것입니다 오류 발생됨 Google으로 로그인 웹사이트 정책 및 이용약관에 동의합니다. 계정이 없으시면, 가입하십시오 MQL5.com 웹사이트에 로그인을 하기 위해 쿠키를 허용하십시오. 브라우저에서 필요한 설정을 활성화하시지 않으면, 로그인할 수 없습니다. 사용자명/비밀번호를 잊으셨습니까? Google으로 로그인
https://www.mql5.com/ru/forum/97557/page4#comment_2891988
거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼
OrderSend를 사용하여 MT5에서 올바르게 작동하는 방법
fxsaber , 2016.11.14 20:20
이것은 스크립트 의 문제입니다.죄송하지만 스크립트를 처리하고 싶은 마음은 없습니다.
추가됨
하지만 탈출구가 있다
OrderrSend() 함수는 동기식이므로 주문을 수신하면
기록이 OnTradeTransaction() 에서 동기화되었는지 확인하십시오.
// Expert TradeTransaction function |
//+------------------------------------------------------------------+
void OnTradeTransaction ( const MqlTradeTransaction &trans,
const MqlTradeRequest &request,
const MqlTradeResult &result)
{
switch (trans.type)
{
case TRADE_TRANSACTION_ORDER_UPDATE :
switch (trans.order_state)
{
case ORDER_STATE_PLACED :
if (order_ticket==trans.order)
{
Print ( __FUNCTION__ , " Order plased done. Ticket = " ,trans.order);
if (order_ticket> 0 )
{
if ( OrderSelect (order_ticket))
{
//Ордер синхронизирован с историей
}
else
{
Print ( __FUNCTION__ , " Order not select! Ticket = " ,trans.order);
}
}
else
{
Print ( __FUNCTION__ , " Wrong order ticket = " ,trans.order);
}
}
break ;
}
break ;
}
}
그리고 춤은 추지 않는다!
그리고 춤은 추지 않는다!
거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼
OrderSend를 사용하여 MT5에서 올바르게 작동하는 방법
fxsaber , 2016.11.10 10:00
이것은 스크립트이며 어떤 이벤트도 있을 수 없습니다 . 유일한 탈출구는 바보 수면입니다.
SB를 사용하여 이 스크립트를 다시 작성하면 아무 것도 변경되지 않습니다.
원하는대로 수면을 왜곡시킬 수 있습니다....
그들 자신이 이미 제안한 것과 그 이전에 다른 사람들이 말한 것을 왜 반복합니까?
스레드는 OnTradeTransaction의 가능한 문제에 대한 모든 것을 말합니다. 특히 동시에 여러 고문의 작업에 대해.
사람들은 목발을 만듭니다. 문서를 모르고 기능을 사용하는 방법을 모른다는 의미는 아닙니다.
OnTrade와 OnTradeTransaction은 정확히 그들이 한 일입니다. 그리고 그것이 탄생했을 때 개발자들은 계정에 두 명 이상의 고문과 동시에 작업하는 것이 어리석은 일이라고 믿었습니다.
글쎄, 그들은이 점수에서 틀렸습니다. 누구와도 일어나지 않습니다.
EA에서 다음 함수 를 작성해 보세요.
그들 자신이 이미 제안한 것과 그 이전에 다른 사람들이 말한 것을 왜 반복합니까?
스레드는 OnTradeTransaction의 가능한 문제에 대한 모든 것을 말합니다. 특히 동시에 여러 고문의 작업에 대해.
사람들은 목발을 만듭니다. 문서를 모르고 기능을 사용하는 방법을 모른다는 의미는 아닙니다.
OnTrade와 OnTradeTransaction은 정확히 그들이 한 일입니다. 그리고 그것이 탄생했을 때 개발자들은 계정에 두 명 이상의 고문과 동시에 작업하는 것이 어리석은 일이라고 믿었습니다.
글쎄, 그들은이 점수에서 틀렸습니다. 누구와도 일어나지 않습니다.
EA에서 다음 함수 를 작성해 보세요.
현재 저는 41명의 Expert Advisors가 실생활에서(하나의 터미널에서) 일하고 있으며, 이는 총 거래일입니다.
2000개 주문을 오픈 포지션과 클로즈 포지션으로 설정했는데 전혀 어려움을 겪지 않았습니다!
추가됨
'그렇게 필요하다'는 것이 아니라 있는 기능부터 진행해야 한다.
개발자는 가능한 경우 희망 사항을 고려하여 오류를 수정하고 단점을 제거합니다.
(매우 느리지만).
OederSend()가 곧 해결될 것 같습니다.
현재 저는 41명의 Expert Advisors가 실생활에서(하나의 터미널에서) 일하고 있으며, 이는 총 거래일입니다.
2000개 주문을 오픈 포지션과 클로즈 포지션으로 설정했는데 전혀 어려움을 겪지 않았습니다!
주제에서 벗어나라고 합니다.
가장 단순한 논리라도
거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼
OrderSend를 사용하여 MT5에서 올바르게 작동하는 방법
fxsaber , 2016.11.15 13:30
EA에서 다음 함수 를 작성해 보세요.
#property strict
#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006
void Func( const string &Symbols[] )
{
const int Total = ArraySize (Symbols);
for ( int i = 0 ; i < Total; i++)
{
const double Price = SymbolInfoDouble (Symbols[i], SYMBOL_ASK );
const int digits = ( int ) SymbolInfoInteger (Symbols[i], SYMBOL_DIGITS );
if (! OrderSelect ( OrderSend (Symbols[i], OP_BUY , 1 , Price, 100 , 0 , 0 , DoubleToString (Price, digits)), SELECT_BY_TICKET ) ||
( NormalizeDouble (Price - OrderOpenPrice (), digits) != 0 )) // если не получилось открыть или есть проскальзывание - выходим
break ;
}
}
void OnStart () // OnTick
{
const string Symbols[] = { "EURUSD" , "GBPUSD" , "AUDUSD" , "USDCAD" , "USDJPY" };
Func(Symbols);
}
그리고 누군가는 개발자들의 천상의 마력을 기다리고 있습니다.
나는 이미 당신이 원하는 대로 변태할 권리가 있다고 말했습니다(모든 사람이 이 권리를 가집니다).
나는 이미 당신이 원하는 대로 변태할 권리가 있다고 말했습니다(모든 사람이 이 권리를 가집니다).
오래 전 일이지만 이 사람을 기억합니다. 음, 이 사람 - fxsaber 는 놀라운 일을 했습니다.
지금까지 해당 코드는 MT4 코드베이스에 저장되어 있으며 WinInet을 통해 사이트를 읽기 위한 코드입니다.
오늘날까지 많은 프로그래머가 사용...
따라서 그는 변태가 아닌 것 같습니다 ...
const bool IsTester = (:: MQLInfoInteger ( MQL_TESTER ) || :: MQLInfoInteger ( MQL_OPTIMIZATION ) ||
:: MQLInfoInteger ( MQL_VISUAL_MODE ) || :: MQLInfoInteger ( MQL_FRAME_MODE ));
bool Waiting( const bool FlagInit = false )
{
static ulong StartTime = 0 ;
if (FlagInit)
StartTime = :: GetMicrosecondCount ();
const bool Res = (:: GetMicrosecondCount () - StartTime < OrderSend_MaxPause);
if (Res)
:: Sleep ( 0 );
return (Res);
}
bool EqualPrices( const double Price1, const double Price2, const int digits)
{
return (:: NormalizeDouble (Price1 - Price2, digits) == 0 );
}
#define WHILE(A) while (!(Res = (A)) && Waiting())
bool OrderSendSync ( const MqlTradeRequest &Request, MqlTradeResult &Result )
{
bool Res = :: OrderSend (Request, Result);
if (Res && !IsTester && (Result.retcode < TRADE_RETCODE_ERROR ) && (OrderSend_MaxPause > 0 ))
{
Res = (Result.retcode == TRADE_RETCODE_DONE );
Waiting( true );
if (Request.action == TRADE_ACTION_DEAL )
{
WHILE(:: HistoryOrderSelect (Result.order))
;
Res = Res && ((( ENUM_ORDER_STATE ):: HistoryOrderGetInteger (Result.order, ORDER_STATE ) == ORDER_STATE_FILLED ) ||
(( ENUM_ORDER_STATE ):: HistoryOrderGetInteger (Result.order, ORDER_STATE ) == ORDER_STATE_PARTIAL ));
if (Res)
WHILE(:: HistoryDealSelect (Result.deal))
;
}
else if (Request.action == TRADE_ACTION_PENDING )
{
if (Res)
WHILE(:: OrderSelect (Result.order))
;
else
{
WHILE(:: HistoryOrderSelect (Result.order))
;
Res = false ;
}
}
else if (Request.action == TRADE_ACTION_SLTP )
{
if (Res)
{
bool EqualSL = false ;
bool EqualTP = false ;
const int digits = ( int ):: SymbolInfoInteger (Request.symbol, SYMBOL_DIGITS );
if ((Request.position == 0 ) ? :: PositionSelect (Request.symbol) : :: PositionSelectByTicket (Request.position))
{
EqualSL = EqualPrices(:: PositionGetDouble ( POSITION_SL ), Request.sl, digits);
EqualTP = EqualPrices(:: PositionGetDouble ( POSITION_TP ), Request.tp, digits);
}
WHILE((EqualSL && EqualTP))
if ((Request.position == 0 ) ? :: PositionSelect (Request.symbol) : :: PositionSelectByTicket (Request.position))
{
EqualSL = EqualPrices(:: PositionGetDouble ( POSITION_SL ), Request.sl, digits);
EqualTP = EqualPrices(:: PositionGetDouble ( POSITION_TP ), Request.tp, digits);
}
}
}
else if (Request.action == TRADE_ACTION_MODIFY )
{
if (Res)
{
bool EqualSL = false ;
bool EqualTP = false ;
const int digits = ( int ):: SymbolInfoInteger (Request.symbol, SYMBOL_DIGITS );
if (:: OrderSelect (Result.order))
{
EqualSL = EqualPrices(:: OrderGetDouble ( ORDER_SL ), Request.sl, digits);
EqualTP = EqualPrices(:: OrderGetDouble ( ORDER_TP ), Request.tp, digits);
}
WHILE((EqualSL && EqualTP))
if (:: OrderSelect (Result.order))
{
EqualSL = EqualPrices(:: OrderGetDouble ( ORDER_SL ), Request.sl, digits);
EqualTP = EqualPrices(:: OrderGetDouble ( ORDER_TP ), Request.tp, digits);
}
}
}
else if (Request.action == TRADE_ACTION_REMOVE )
if (Res)
WHILE(:: HistoryOrderSelect (Result.order))
;
}
return (Res);
}
#undef WHILE