초보자의 질문 MQL4 MT4 MetaTrader 4 - 페이지 112

 
Николай Цепелев :

안녕하세요. 나는 다음과 같은 방식으로 로트 계산을 전문가 고문에게 썼습니다.

lot=NormalizeDouble(AccountBalance()*risk/(SL*MarketInfo(Symbol(),MODE_TICKVALUE)),2);

목표는 계정 통화 및 쌍에 관계없이 주어진 위험과 손절매에 대한 올바른 로트 크기를 얻는 것입니다. 위험 손절매가 트리거될 때 손실의 백분율로 설정됩니다. 손절매 SL 포인트 단위(여기서 포인트는 해당 쌍의 가격에서 가능한 최소 변경). 실제 계정 에서 이 고문을 실행할 것입니다. 그러나 의문점이 있습니다. 경험 많은 프로그래머가 어떤 오류가 발생할 수 있는지 알려 주시면 매우 감사하겠습니다.
첫 번째 전략 테스터 . 그런 다음 데모 계정. 그리고 나서야 진짜. 공식을 테스트하는 스크립트를 작성하십시오. 아니면 그냥 종이에 의지하십시오. 취한 잔액=100, 위험=0.1 SL=100, Tick=0.00001 Lot=100*0.1 / (100*0.00001) = 10 / 0.001 = 잔액보다 10000랏 더 많습니까? 어깨를 고려할까요?
 
STARIJ :
첫 번째 전략 테스터 . 그런 다음 데모 계정. 그리고 나서야 진짜. 수식을 테스트하는 스크립트를 작성하십시오. 아니면 그냥 종이에 의지하십시오. 취한 잔액=100, 위험=0.1 SL=100, Tick=0.00001 Lot=100*0.1 / (100*0.00001) = 10 / 0.001 = 잔액보다 10000랏 더 많습니까? 어깨를 고려할까요?

MarketInfo(Symbol(),MODE_TICKVALUE))는 최소 눈금 크기를 반환하지 않습니다. 도움말은 다음과 같이 말합니다.

예금 통화로 표시된 상품 가격의 최소 변동 금액입니다 .


그러나 실제로는 계약의 1랏의 예금 통화로 상품 가격의 최소 변동 비용이 나옵니다.


제공한 예에서 MarketInfo(Symbol(),MODE_TICKVALUE))는 1을 반환합니다. 그러면 모든 것이 정확합니다. 실제 달러 및 루블 계정의 스크립트로 확인했는데 모든 것이 작동합니다. 테스트한 스크립트는 다음과 같습니다.

  #property copyright "Copyright 2016, MetaQuotes Software Corp."

#속성 링크 "https://www.mql5.com"

#속성 버전 "1.00"

#속성엄격

#property show_inputs

외부 이중 위험 = 0.10;

외부 int sl=1000;

//+----------------------------------------------- --------------------+

//| 스크립트 프로그램 시작 기능 |

//+----------------------------------------------- --------------------+

무효 OnStart()

{

Alert(NormalizeDouble(AccountBalance()*risk/(sl*MarketInfo(Symbol(),MODE_TICKVALUE)),2));

}

//+----------------------------------------------- --------------------+

Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
  • www.mql5.com
Задавайте вопросы по техническому анализу, обсуждайте торговые системы и улучшайте свои навыки программирования торговых стратегий на языке MQL5. Общайтесь и обменивайтесь опытом на форуме с трейдерами всего мира и помогайте ответами новичкам — наше сообщество развивается вместе с вами. Библиотеки: Black or White Text Black or White Text...
 

네가 옳아. 스크립트 검사 - 더 빠르고 안정적인

 //+------------------------------------------------------------------+ 
//| Расчет лота                                                      | 
//+------------------------------------------------------------------+ 
#property strict
#property show_inputs
extern double risk= 0.10 ;
extern int     sl  = 100 ;
void OnStart () 
{ 
   Alert ( MarketInfo ( Symbol (), MODE_TICKVALUE ), "   " , NormalizeDouble ( AccountBalance ()*risk/(sl* MarketInfo ( Symbol (), MODE_TICKVALUE )), 2 ));
}
 
Николай Цепелев :
귀하의 스크립트는 화면에서 높이가 19cm이고 제 8.1cm는 그 절반입니다. 그리고 색이 달라요
 

또한 최소 허용 로트에 따라 NormaliseDouble 함수의 정확도를 만들어야 합니다. 그렇지 않고 로트(예: 0.11)가 OrderSend 함수 에 전달되고 상품이 0.1의 배수인 로트에서만 거래되는 경우 오류가 발생합니다.

 

안녕하세요! 모든 미결 거래가 즉시 삭제되지 않는 이유를 이해할 수 없습니다. 즉, 고문이 일부를 삭제하고 나머지에 오류 orderdelete 4108을 제공하고 시장 주문을 여러 번 삭제할 수 없으며 그 후에 만 삭제합니다. 삭제 주기가 시작되기 전에 이미 열려 있었지만.

   int start()                                     
  {
  
   while (! IsStopped ())     
      {               

Refreshrates();

  
   if (cont== true && NormalizeDouble ( AccountProfit (), 2 )>= 0 )
    {
     for (i= 1 ; i<= OrdersTotal (); i++)       
        { RefreshRates (); 
         if ( OrderSelect (i- 1 , SELECT_BY_POS )== true
           {                                    
               while ( OrderType ()== OP_BUYLIMIT ) 
              {
               res= false ;
               res= OrderDelete ( OrderTicket ());
               if (res== true )
               break ;
               }
               while ( OrderType ()== OP_BUY )
              {
               res= false ;
               res= OrderClose ( OrderTicket (), OrderLots (), MarketInfo (Symb, MODE_BID ),Slippage);  
               if (res== true )
               break ;
              }
               while ( OrderType ()== OP_SELLLIMIT ) 
              {
               res= false ;
               res= OrderDelete ( OrderTicket ());
               if (res== true )
               break ;
              }
               while ( OrderType ()== OP_SELL )
              {
               res= false ;     
               res= OrderClose ( OrderTicket (), OrderLots (), MarketInfo (Symb, MODE_ASK ),Slippage);
               if (res== true )
               break ;
              }     
           }  
         }
}
}  
 
Yevgen Butov :

안녕하세요! 모든 미결 거래가 즉시 삭제되지 않는 이유를 이해할 수 없습니다. 즉, 고문이 일부를 삭제하고 나머지에 오류 orderdelete 4108을 제공하고 시장 주문을 여러 번 삭제할 수 없으며 그 후에 만 삭제합니다. 삭제 주기가 시작되기 전에 이미 열려 있었지만.

페이지에서는 삭제 방법을 설명 합니다. 2개의 실수가 있습니다.

 
안녕하세요. 도와주세요. 그물과 포럼에서 모두 기어올랐습니다. 나는 표준 모드에서 EA를 테스트하고 있습니다. 모든 것이 정상입니다... 오류도, 경고도 없습니다. 다운로드된 틱 데이터가 추가되었습니다. (여기에 설명된 대로 모든 작업을 수행했습니다. - "99% 품질로 Expert Advisors를 테스트하는 방법 - 쉽고, 무료이며, 합법적입니다." 및 여기 - "Metatrader 4 전략 테스터 에서 99% 모델링 품질을 얻는 방법") Expert1.0.mq4 ' (69,25)... 배열인줄 알았습니다. 그리고 무엇을 하지 않을 것입니다. 하지만 표준 모드에서는 모든 것이 정상입니다... Pliz 도움말
 
qroner :
실행시 'expert1.0.mq4' (69,25) 에서 계속해서 array out of range 라는 에러가 납니다... 배열인줄 알았습니다. 그리고 무엇을 하지 않을 것입니다.

이 배열을 처리하는 코드 또는 그 일부를 살펴봐야 합니다.

텔레파시는 오늘 쉬고 있습니다.

 
Konstantin Nikitin :

이 배열을 처리하는 코드 또는 그 일부를 살펴봐야 합니다.

텔레파시는 오늘 쉬고 있습니다.

무효 Uchet_Orderov_Function(문자열 _Simvol, int _Magic, int &_Mas[8]){
배열 초기화( _Mas , 0);
정수 티켓=-1;
for(int pos=OrdersTotal()-1; pos>=0; pos--){
if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==_Simvol&&
OrderMagicNumber()==_Magic && OrderTicket()!=티켓){
티켓=OrderTicket();
스위치(주문 유형()){
사례 0:{_Mas[0]++;_Mas[6]++;break;}
사례 1:{_Mas[1]++;_Mas[6]++;break;}
사례 2:{_Mas[2]++;_Mas[7]++;break;}
사례 3:{_Mas[3]++;_Mas[7]++;break;}
사례 4:{_Mas[4]++;_Mas[7]++;break;}
사례 5:{_Mas[5]++;_Mas[7]++;break;}
}
}
}

}

다음은 기능입니다.

표준 모드에는 오류가 없기 때문에 문제가 코드에 없다고 생각했습니다.