MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 550

 
iv1986 :

코드의 끝에는 Alert(result.retcode);

일반 저널:

2018.05.14 12:08:16.984 스크립트 스크립트 LIMIT(Si-6.18,M15)가 성공적으로 로드되었습니다.

2018.05.14 12:08:17.187 거래 '992940': 구매 한도 3.00 Si-6.18 at 62091 (62092) sl: 61821 tp: 62905

2018.05.14 12:08:17.484 거래 '992940': 허용되는 구매 제한 3.00 Si-6.18 at 62091 (62092) sl: 61821 tp: 62905

2018.05.14 12:08:17.500 거래 '992940': 구매 제한 3.00 Si-6.18 at 62091 (62092) sl: 61821 tp: 62905 실행을 위해 배치됨

2018.05.14 12:08:17.546 거래 '992940': 주문 번호 13235300 구매 제한 3.00 / 3.00 Si-6.18 at 62091, 337.532ms에 완료

2018.05.14 12:08:17.578 스크립트 스크립트 LIMIT(Si-6.18,M15) 제거됨

칼럼 전문가: 2018.05.14 12:08:17.578 한계(Si-6.18,M15) 경보: 10009, 다른 것은 없습니다.

어떻게 도와드릴까요? 먼저 Sell Limit이 설정되지 않았다고 쓰고 로그에서 발췌한 내용을 제공합니다. 이제 우리는 구매 제한 주문에 대해 이야기하고 있습니다. 문제는 일종의 떠 다니는 것으로 나타났습니다. 또한 그들은 성명서를 제출하지 않았습니다. 실제로는 영장이 보이지 않는다는 말씀이시군요. 진술은 상황을 명확히 하는 데 도움이 될 수 있습니다.

 
void OnStart()
 {MqlTradeRequest request={0};
  MqlTradeResult  result={0};
 double Bid=SymbolInfoDouble(Symbol(),SYMBOL_BID);
 double Ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
 int digits=SymbolInfoInteger(_Symbol,SYMBOL_DIGITS);  
 double p=NormalizeDouble(ChartPriceOnDropped(),digits); 
 if( SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE)==10)
 {p=MathRound(ChartPriceOnDropped()*0.1)/0.1;
 } 
 int V=75;
           if (p<Ask)
            {
             request.action   =TRADE_ACTION_PENDING;                     // тип торговой операции
             request.symbol   =Symbol();                              // символ
             request.volume   =MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)/V/((Ask-p)/
             SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE)*SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)));  
             if (request.volume>AccountInfoDouble(ACCOUNT_BALANCE)/SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL)) 
             { request.volume=MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)/SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL));
             }                             
             request.type     =ORDER_TYPE_BUY_LIMIT;                        // тип ордера
             request.price    =NormalizeDouble(Ask-SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE),digits);     // цена для открытия
             request.deviation=50;                                     // допустимое отклонение от цены
             request.sl      =p;                                      // Stop Loss позиции
             request.tp      =NormalizeDouble(Ask+(Ask-p)*3,digits);    // Take Profit позиции
             request.type_filling=ORDER_FILLING_IOC;
             request.type_time=ORDER_TIME_DAY;
             request.stoplimit=Ask;
             OrderSend(request,result);
            }
         if (p>Bid)
            {
             request.action   =TRADE_ACTION_PENDING;                     // тип торговой операции
             request.symbol   =Symbol();                              // символ
             request.volume   =MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)/V/((p-Bid)/
             SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE)*SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE))); 
             if (request.volume>AccountInfoDouble(ACCOUNT_BALANCE)/SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL)) 
             { request.volume=MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)/SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL));
             }                                      // объем 
             request.type     =ORDER_TYPE_SELL_LIMIT;                        // тип ордера
             request.price    =NormalizeDouble(Bid+SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE),digits);      // цена для открытия
             request.deviation=50;                                     // допустимое отклонение от цены
             request.sl      =p;                                      // Stop Loss позиции
             request.tp      =NormalizeDouble(Bid-(p-Bid)*3,digits); // Take Profit позиции
             request.type_time=ORDER_TIME_DAY;
             request.type_filling=ORDER_FILLING_IOC;
             request.stoplimit=Bid;
             OrderSend(request,result);
            }  
       
       Alert(result.retcode);          
     return;
   }
 
Ihor Herasko :

어떻게 도와드릴까요? 먼저 Sell Limit이 설정되지 않았다고 쓰고 로그에서 발췌한 내용을 제공합니다. 이제 우리는 구매 제한 주문에 대해 이야기하고 있습니다. 문제는 일종의 떠 다니는 것으로 나타났습니다. 또한 그들은 성명서를 제출하지 않았습니다. 실제로는 영장이 보이지 않는다는 말씀이시군요. 진술은 상황을 명확히 하는 데 도움이 될 수 있습니다.

매도 한도나 매수 한도가 설정되지 않은 경우 경고 (result.retcode)는 10009를 반환합니다. 이 "문"은 어디에서 얻을 수 있습니까? 어떻게 해야 합니까?

 
iv1986 :

이 코드를 직접 실행했습니다. 초기화 마진이 없기 때문에 비 교환 기호에 대해 0으로 나누기 오류가 발생합니다.

출시가 가능한 곳에 볼륨 체크를 추가해야 했습니다. 그렇지 않으면 볼륨이 0으로 판명되었습니다.

 if (request.volume < SymbolInfoDouble ( _Symbol , SYMBOL_VOLUME_MIN ))
   request.volume = SymbolInfoDouble ( _Symbol , SYMBOL_VOLUME_MIN );

그 후, 주문이 성공적으로 이루어집니다. 또한 가격에 매우 근접하여 매우 빠르게 작동합니다. 따라서 주문 자체를 알아차릴 시간이 없을 수 있습니다. 계정 유형이 상계인 경우 포지션으로 전환되거나 합류합니다.

 
iv1986 :

매도 한도나 매수 한도가 설정되지 않은 경우 경고 (result.retcode)는 10009를 반환합니다. 이 "문"은 어디에서 얻을 수 있습니까? 어떻게 해야 합니까?

도구 창의 기록 탭. 상황에 맞는 메뉴에서 "주문"을 선택합니다. 그런 다음 컨텍스트 메뉴 "보고서"- "HTML"에서도. 그러나 아마도 주문이 없는 이유를 스스로 알 수 있습니다. 주문 상태가 "채움"으로 표시됩니다.

 

2009년에 대한 스크립트를 찾았고 이제 경고와 함께 컴파일 중입니다. 'M' - 인식할 수 없는 문자 이스케이프 시퀀스 1.mq4 66 37

PapkaFiles    = TerminalPath ()+ "\MQL4\Files\\" ; //Путь к терминалу 

올바르게 컴파일되도록 줄에서 수정해야 할 사항을 알려주십시오.

 
Ihor Herasko :

이 코드를 직접 실행했습니다. 초기화 마진이 없기 때문에 비 교환 기호에 대해 0으로 나누기 오류가 발생합니다.

출시가 가능한 곳에 볼륨 체크를 추가해야 했습니다. 그렇지 않으면 볼륨이 0으로 판명되었습니다.

그 후, 주문이 성공적으로 이루어집니다. 또한 가격에 매우 근접하여 매우 빠르게 작동합니다. 따라서 주문 자체를 확인할 시간이 없을 수 있습니다. 계정 유형이 상계인 경우 포지션으로 전환되거나 합류합니다.

고맙습니다!
 
HeAic :

2009년에 대한 스크립트를 찾았고 이제 경고와 함께 컴파일 중입니다. 'M' - 인식할 수 없는 문자 이스케이프 시퀀스 1.mq4 66 37

올바르게 컴파일되도록 줄에서 수정해야 할 사항을 알려주십시오.

MQL4 앞에 이중 백슬래시를 넣으십시오.
 
안녕하세요 복사용 시그널과 로봇을 MT4 계정에 연결하고 vps에 전체 연결하는 방법을 알려주실 수 있나요?
 
Artyom Trishkin :
MQL4 앞에 이중 백슬래시를 넣으십시오.
그리고 F 이전에도. 모든 슬래시는 이중이어야 합니다.