우리는 물론 귀하의 사례를 확인할 것입니다.
그러나 일반적 으로 OrderSend 기능 은 도움말에 따라 작동합니다.
Возвращаемое значение
구조의 기본 검사(포인터 검사)가 성공한 경우 true가 반환 됩니다. 이는 거래 작업의 성공적인 실행을 나타내지 않습니다 . 함수 실행 결과에 대한 자세한 설명을 얻으려면 결과 구조의 필드를 분석해야 합니다 .
- www.mql5.com
아니요, 불평하는 것이 아닙니다. 단지 이해하고 싶을 뿐입니다. 내가 다른 곳에서 망쳤을 수도 있습니다 ... 결과 구조의 필드는 [그들이 가르친대로 :)] 필요하다고 생각한 곳에서도 분석됩니다.
하지만 내가 알기로는 최소한 터미널이 OrderSend() 함수[결과 구조의 필드 수신 및 처리 포함]를 완전히 처리한 후에야 다음 문으로의 전환이 발생해야 한다고 가정 합니다.
(죄송합니다, 이전 질문에서 오타를 냈습니다: 결과 대신 요청을 지정했습니다)
챔피언십 첫 날 내 Expert Advisor가 의도한 대로 작동하지 않는 것으로 나타났습니다. 즉, 하나의 보류 주문 대신 여러 단방향 보류 주문을 배치합니다. 다음 구성을 사용합니다.
질문: 터미널은 첫 번째 블록[즉. 요청을 기다리나요] 아니면 서버 에 거래 요청을 보낸 후 즉시 다음 오퍼레이터(블록)로 넘어가나요?문제를 확인합니다. 보류 중인 주문의 OrderSend()를 설정한 후 OrdersTotal은 항상 그것을 볼 수 없습니다.
OrderSend() 후에 일시 중지를 설정했습니다. 하지만 오늘 그녀는 로봇 챔피언십을 돕지 않았습니다 :)
다른 스레드의 토론 링크 모음:
https://www.mql5.com/ru/forum/2236/page13/#comment_27472
https://www.mql5.com/ru/forum/2236/page13/#comment_27486
https://www.mql5.com/ru/forum/2236/page13/#comment_27503
https://www.mql5.com/ru/forum/2236/page14/#comment_27531 (비동기에 대해)
https://www.mql5.com/ru/forum/2236/page14/#comment_27552
- www.mql5.com
좋은 오후입니다.
나는 단순히 시장에 대한 주문을 여는 프로그램을 만들려고 해요. 저것들. 필요한 방향의 위치가 나타날 때까지 루프에서 기호, 볼륨 및 주문 유형을 보냅니다.
저널 이슈
2012.01.09 16:08:42 거래 '9066293' : 0.0000에서 1.00 EURUSD 즉시 구매 실패 (편차: 103117312) [잘못된 정지]
그렇다면 시장에 공개한다면 왜 시가를 표시해야 합니까? 그리고 나는 발이 필요하지 않습니다.
F9에서는 모든 것이 훌륭하게 열립니다.
내가 엉망인 곳이나 주문을 여는 코드를 알려주십시오.
구조를 채우는 최소값은 다음과 같습니다.
uint zOrderSend ( string zSymbol, double zVolume, string zORDER_TYPE) { zSymbol = "EURUSD" ; zVolume = 1 ; zORDER_TYPE = "Buy" ; Alert ( "*****************" , zSymbol, " " , zVolume, " " , zORDER_TYPE); //--- готовим запрос MqlTradeRequest request; request.action= TRADE_ACTION_DEAL ; // request.magic=0; request.symbol=zSymbol; // request.volume=zVolume; request.volume=zVolume; // request.price=0; // request.sl=0; // request.tp=0; // request.deviation=SymbolInfoInteger("EURUSD",SYMBOL_SPREAD); // slippage // request.deviation=50; //--- сформируем тип ордера if (zORDER_TYPE == "Buy" ) {request.type = ORDER_TYPE_BUY ;} // тип ордера = 0 if (zORDER_TYPE == "Sell" ) {request.type = ORDER_TYPE_SELL ;} // тип ордера = 1 Alert ( "Тип ордера: request.type = " ,request.type); request.type_filling = ORDER_FILLING_FOK ; request.type_time = ORDER_TIME_GTC ; // request.comment = "";파일에서 포지션을 열기 위한 Expert Advisor의 전체 테스트.
좋은 오후입니다.
나는 단순히 시장에 대한 주문을 여는 프로그램을 만들려고 해요. 저것들. 필요한 방향의 위치가 나타날 때까지 루프에서 기호, 볼륨 및 주문 유형을 보냅니다.
그리고 뭔가가 나온다 = Invalid Stops, 그리고 나는 시장가 주문에 대해 어떤 스탑도 필요하지 않습니다. 어디로 가는지도 모르겠고...
파일에서 포지션을 열기 위한 Expert Advisor의 전체 테스트.
모든 작업을 계속
//+------------------------------------------------------------------+ //| Deal.mq5 | //| Copyright 2012, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2012, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit () { //--- create timer EventSetTimer ( 1 ); //--- return ( 0 ); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit ( const int reason) { //--- destroy timer EventKillTimer (); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick () { //--- if (zOrderSend( _Symbol , 0.1 , ORDER_TYPE_BUY )== 10009 ) // 10009 TRADE_RETCODE_DONE Заявка выполнена { Alert ( "Купили!" ); } else Alert ( "Не купили...." ); } //+------------------------------------------------------------------+ //| Timer function | //+------------------------------------------------------------------+ void OnTimer () { //--- } //+------------------------------------------------------------------+ uint zOrderSend( string zSymbol, double zVolume, ENUM_ORDER_TYPE zORDER_TYPE) { MqlTradeRequest request; MqlTradeCheckResult ch_result; MqlTradeResult result; // обнулим структуру запроса перед заполнением ZeroMemory (request); Alert ( "*****************" ,zSymbol, " " ,zVolume, " " ,zORDER_TYPE); // заполняем структуру request.action= TRADE_ACTION_DEAL ; request.type_filling= ORDER_FILLING_AON ; request.symbol=zSymbol; request.type=zORDER_TYPE; request.deviation= 30 ; request.sl= 0.0 ; request.tp= 0.0 ; request.volume=zVolume; if (zORDER_TYPE== ORDER_TYPE_BUY )request.price= NormalizeDouble ( SymbolInfoDouble ( _Symbol , SYMBOL_ASK ), _Digits ); if (zORDER_TYPE== ORDER_TYPE_SELL )request.price= NormalizeDouble ( SymbolInfoDouble ( _Symbol , SYMBOL_BID ), _Digits ); // выводим на печать заполненную структуру торгового запроса Alert ( " ENUM_TRADE_REQUEST_ACTIONS request.action; // Тип выполняемого действия =" ,request.action, "=" ); Alert ( " ulong request.magic; // Штамп эксперта (идентификатор magic number) =" , request.magic, "=" ); Alert ( " ulong request.order; // Тикет ордера =" , request.order, "=" ); Alert ( " string request.symbol; // Имя торгового инструмента =" , request.symbol, "=" ); Alert ( " double request.volume; // Запрашиваемый объем сделки в лотах =" , request.volume, "=" ); Alert ( " double request.price; // Цена =" , request.price, "=" ); Alert ( " double request.stoplimit; // Уровень StopLimit ордера =" , request.stoplimit, "=" ); Alert ( " double request.sl; // Уровень Stop Loss ордера =" , request.sl, "=" ); Alert ( " double request.tp; // Уровень Take Profit ордера =" , request.tp, "=" ); Alert ( " ulong request.deviation; // Максимально приемлемое отклонение от запрашиваемой цены =" , request.deviation, "=" ); Alert ( " ENUM_ORDER_TYPE request.type; // Тип ордера =" , request.type, "=" ); Alert ( " ENUM_ORDER_TYPE_FILLING request.type_filling; // Тип ордера по исполнению =" , request.type_filling, "=" ); Alert ( " ENUM_ORDER_TYPE_TIME request.type_time; // Тип ордера по времени действия =" , request.type_time, "=" ); Alert ( " datetime request.expiration; // Срок истечения ордера (для ордеров типа ORDER_TIME_SPECIFIED) =" , request.expiration, "=" ); Alert ( " string request.comment; // Комментарий к ордеру =" , request.comment, "=" ); // отправляем структуру запроса на проверку if ( OrderCheck (request,ch_result)== false ) { Alert ( "OrderCheck выявил ошибку: " + IntegerToString (ch_result.retcode)+ "/" +ch_result.comment); return ch_result.retcode; } // отправляем запрос на торговый сервер if ( OrderSend (request,result)== false ) { Alert ( "OrderSend возвратил ошибку: " + IntegerToString (result.retcode)+ "/" +result.comment); return result.retcode; } // выводим на печать структуру ответа сервера Alert ( "Код результата операции сервера: " + IntegerToString (result.retcode)); Alert ( "deal Тикет сделки " + IntegerToString (result.deal)); Alert ( "order Тикет ордера " + IntegerToString (result.order)); Alert ( "volume Объем сделки " + DoubleToString (result.volume)); Alert ( "price Цена в сделке " + DoubleToString (result.price)); Alert ( "bid(цены реквоты) " + DoubleToString (result.bid)); Alert ( "ask(цены реквоты) " + DoubleToString (result.ask)); Alert ( "Комментарий: " +result.comment); return result.retcode; } //+------------------------------------------------------------------+
모든 작업을 계속
고맙습니다. 공장. 그리고 너무 빨리 위치에 대한 정보를 업데이트할 시간이 없습니다.
그 결과 2건의 주문이 접수되었습니다.
1밀리초의 일시 중지로 처리됩니다!
if (zOrderSend( _Symbol , 0.1 , ORDER_TYPE_BUY )== 10009 ) // 10009 TRADE_RETCODE_DONE Заявка выполнена { Sleep (1); Alert ( "Купили!" ); } else Alert ( "Не купили...." ); }
... 위치에 대한 정보를 업데이트할 시간이 없습니다.
그 결과 2건의 주문이 접수되었습니다.
1밀리초의 일시 중지로 처리됩니다!
일시 중지가 만병 통치약이 아님을 명심하십시오.
일시 중지가 만병 통치약이 아님을 명심하십시오.
KimV의 주문 확인 기능이 도움이 되지 않습니까?
챔피언십 첫날에 내 Expert Advisor가 의도한 대로 작동하지 않는 것으로 나타났습니다. 다음과 같은 것을 사용합니다.
질문: 터미널은 첫 번째 블록[즉. 요청을 기다리나요] 아니면 서버 에 거래 요청을 보낸 후 즉시 다음 오퍼레이터(블록)로 넘어가나요?