OrderSend를 실행한 후 해당 주문, 위치 또는 거래에 액세스하는 것이 항상 성공적인 것은 아닙니다. 과거 또는 현재 거래 정보가 정확해질 때까지 수십 밀리초를 기다려야 하는 상황이 있습니다.
거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼
클로즈드 포지션의 TakeProfit(및 StopLoss)
fxsaber , 2016.07.17 20:19
이것은 근거 없는 비난이 아니라 모든 것이 어떻게 작동하는지 알아내려고(HistorySelectByPosition 등의 도움 없이) 많은 시간을 보낸 결과입니다. 그리고 제가 틀렸다면 기꺼이 사과할 준비가 되어 있습니다. 근거가 없는 말을 하지 않기 위해 RoboForexEU-MetaTrader 5 서버에 테스터를 위한 고문(이해하기 쉬움)을 데려와 포지션을 연 다음 SL 및 TP 수준을 설정합니다.
void OnTick () { static bool Flag = true ; if (Flag) { // Открываем SELL-позицию MqlTradeRequest Request = { 0 }; Request.action = TRADE_ACTION_DEAL ; Request.symbol = Symbol (); Request.volume = 1 ; Request.price = SymbolInfoDouble ( Symbol (), SYMBOL_BID ); Request.type = ORDER_TYPE_SELL ; MqlTradeResult Result; if ( OrderSend (Request, Result)) { // Устанавливаем SL и TP Request.position = Result.deal; Request.action = TRADE_ACTION_SLTP ; Request.tp = Result.ask - 10 * _Point ; Request.sl = Result.ask + 10 * _Point ; if ( OrderSend (Request, Result)) Print ( "Сделка в тестере закроется либо по SL, TP, либо по окончании бэктеста" ) ; Flag = false ; } } }
이 Expert Advisor에서는 단일 마감 포지션의 SL 및 TP를 (OnDeinit에서) 결정하는 것이 불가능합니다. 그렇게 의도된 것인가?
거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼
슬라바 , 2017.02.22 11:16
예, 하지만 테스트 중인 Expert Advisor에만 해당됩니다. 전문가가 사용하는 지표의 경우 - 아니오거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼
슬라바 , 2017.02.14 13:46
무엇 때문에? 한 번의 행동으로 충분합니다.그리고 마켓 리뷰에서 심볼이 선택되고 심볼의 히스토리가 전문가에 의해 유지되는 한 동기화된 상태로 유지됩니다. 전문가가 보유한다는 것은 예를 들어 하나의 막대를 복사하여 2분에 한 번 이상 이 기록에 액세스하는 것을 의미합니다. 히스토리가 동기화되면 하나의 막대를 복사하는 데 시간이 소요되지 않습니다. 단 몇 번의 프로세서 주기입니다. 또는 방금 말했듯 이 막대의 수와 몇 사이클을 요청하십시오.
거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼
알렉세이 코지친 , 2017.02.14 13:47
표시기에 2분 간격이 포함되어 있습니까?
네, 동기화 사실을 확인하면 동기화도 진행되나요?
거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼
슬라바 , 2017.02.14 13:50
지표에도 동일하게 적용됩니다. 1분 타이머를 만들고 관심 있는 모든 시계열 의 막대 수를 물어보세요.동기화 사실 확인에 의해 동기화가 보류되지 않습니다.
OrderSend를 실행한 후 해당 주문, 위치 또는 거래에 액세스하는 것이 항상 성공적인 것은 아닙니다. 과거 또는 현재 거래 정보가 정확해질 때까지 수십 밀리초를 기다려야 하는 상황이 있습니다.
몇 밀리초를 기다릴 필요가 없습니다.
메시지가 OnTradeTransaction 으로 전송됩니다.
코드 참조
이것은 스크립트에 없습니다 . 스크립트 대신 Expert Advisor + ExpertRemove를 많이 사용하는 것은 어리석은 일입니다.
게다가 180초 동안 서버로부터 응답이 없으면 OrderSend는 타임아웃으로 떨어진다. 이는 영원히 기다려온 티켓이 OnTradeTransaction에 누적될 수 있음을 시사합니다. 그리고 스크립트에서와 같이 OnTradeTransaction에 대해 하나의 order_ticket 옵션은 좋지 않습니다. 비동기 전송 후 주문 목록에서 작업이 시작됩니다. 그 점에서 팩과 함께 작동하는 비동기식입니다. 그리고 팩에 대한 작업이 없으면 비동기가 필요하지 않습니다.