[경고, 주제 닫힘!] 포럼을 어지럽히지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 당신 없이는 어디에도 없습니다. - 페이지 627

 
chief2000 :

"return(0)"을 "return"으로 대체했지만 이것이 "문제"를 해결하지 못했습니다. 최적화 후에도 동일한 0-0 결과가 여전히 표시됩니다. 최적화 중에 0을 출력하지 않는 솔루션이 있습니까?

고맙습니다!


아시는지 모르나 혹시 몰라서 "쓸모없는 결과 건너뛰기" 체크박스에 체크

부정적인 결과(저울에 따라)는 제거됩니다. 결과가 0인지 확실하지 않지만 계속 시도하십시오.

 
주어진 한도 내에서 무작위로 생성되도록 각 새 틱에서 15 +/- 7 내에서 "임의의" 숫자를 얻는 방법이 궁금합니다.
 

예를 들면 다음과 같습니다.

 int random(){
   MathSrand ( TimeLocal ());
   while (true){
      int x = MathRand ();
      if (x >= 8 && x <= 22 ) return (x);
   }
}

:)

 
ToLik_SRGV :

예를 들면 다음과 같습니다.

:)

고맙습니다!!! ;)
 
ToLik_SRGV :

아시는지 모르나 혹시 몰라서 "쓸모없는 결과 건너뛰기" 체크박스에 체크

부정적인 결과(저울에 따라)는 제거됩니다. 결과가 0인지 확실하지 않지만 계속 시도하십시오.

사실은 부정적인 것을 보고 싶다는 것입니다. 최적화의 초기 단계에서는 종종 부정적인 것 중에서 최상의 결과를 선택해야 하는 경우가 많습니다(나중 단계에서는 보고 비교하는 것이 유용할 수 있음). 0이 방해가 됩니다. 이러한 결과는 의미가 없으며 동시에 많은 결과가 있으며 저장된 파일의 크기가 증가하고 결과를 보는 데 시각적으로 방해가 됩니다. 어쨌든 감사합니다!

 
granit77 :

외부 변수 MA_Fast_Period 및 MA_Slow_Period에 대해 이야기하는 경우 솔루션이 있습니다. Expert Advisor에서 변수를 계산하면 아무 것도 할 수 없습니다.

시간이 늦어서 머리가 더 이상 작동하지 않습니다 ..하지만이 아이디어는 매우 좋은 것 같습니다! 고맙습니다!

 
artmedia70 :
주어진 한도 내에서 무작위로 생성되도록 각 새 틱에서 15 +/- 7 내에서 "임의의" 숫자를 얻는 방법이 궁금합니다.
http://prolang.ru/index.php/cpp/cpptheory/3-clang-random.html

구간 [a,b]에서 균일한 분포를 갖는 임의의 실수를 얻으려면 다음 공식을 사용해야 합니다.

x = rand()*(ba)/RAND_MAX + a;

도움말의 MathRand() 함수 설명에서 mql의 경우 다음과 같이 표시됩니다. 이 함수는 0에서 32767 사이의 의사 난수 정수를 반환합니다.

저것들. mql의 경우 RAND_MAX = 32767

 

나는 mq4를 배우기 시작했고, 즉시 이해할 수 없는 순간에 부딪쳤다.

말하자면 펜 테스트. ma에 대한 간단한 고문 을 작성했습니다. 그리고 이제 그는 역사조차 거래하고 싶지 않습니다. 그래도 오류는 발생하지 않습니다.

내가 어디서 망쳤는지 말해줘?

 int start()
  {
   //---проверим возможность входа в позицию
   bool flagchange = false ;
   int Slippage = 3 ;
   int i = 0 ;
   double lt = getLots() ; // минимальный лот
   RefreshRates();
   int total = OrdersTotal();   
   int ticket = - 1 ;
   for (;;)
      {
       int flag= GetEma();
       if (flagchange != flag) // проверим, сигнал ема изменился? если да, то можно открыть или закрыть поз.
       flagchange = true ;       // изменился!
       else flagchange = false ;
         if (flagchange == True)
        {       
           int Total=OrdersTotal(); //проверим есть открытые позиции?
           if (Total> 0 )
  {
     for (i=Total- 1 ; i>= 0 ; i--) 
     {
         if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)== true ) // если а то закрываем
        {
           if (OrderType()==OP_BUY || OrderType()==OP_SELL) // Только Buy и Sell
           {
               if (OrderType()==OP_BUY) 
               bool Result=OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,CLR_NONE);
               else
              Result=OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,CLR_NONE);
               if (Result!= true ) 
              { 
              Print( "LastError = " ,GetLastError()); 
              }
           }
        }
         else // если открытых нет, то окрываем.
         if (flag == 1 ) OrderSend(Symbol(),OP_BUY,lt,Ask,Slippage,Bid - sl * Point, 0 , "Buy" , 888 , 0 ,Blue);
         else OrderSend(Symbol(),OP_SELL,lt,Bid,Slippage,Ask + sl * Point, 0 , "Seel" , 888 , 0 ,Red);
        {
        }
     }
  }                                             
      }
 }      
//----
   return ( 0 );
  }
       /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// ///
   int GetEma() {
   //----Получим значение EMA1
       int ma1= iMA(Symbol(),PERIOD_H1,ema1, 0 , 1 , 6 , 0 );
   //----Получим значение EMA2   
       int ma2= iMA( "" ,PERIOD_H1,ema2, 0 , 1 , 6 , 0 ); 
       if (ma1>ma2) return ( 1 );
       else return ( 0 );}
   /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// //  
         // посчитаем разтер лота
   double getLots() 
        {
                 double minlot = MarketInfo(Symbol(), MODE_MINLOT);
                 int round = MathAbs(MathLog(minlot) / MathLog( 10.0 )) + 0.5 ;
                 double lot = minlot;
//---- select lot size
                 lot = NormalizeDouble(AccountFreeMargin() * Risk / 1000.0 , round);
                 if (AccountFreeMargin() < lot * MarketInfo(Symbol(), MODE_MARGINREQUIRED)) 
                        {
                                lot = NormalizeDouble(AccountFreeMargin() / MarketInfo(Symbol(), MODE_MARGINREQUIRED), round);
                        }
                 if (lot < minlot) lot = minlot;
                 double maxlot = MarketInfo(Symbol(), MODE_MAXLOT);
                 if (lot > maxlot) lot = maxlot;
//---- return lot size
   return (lot);
        } 
 


부울 플래그 변경 = 거짓;
int 미끄러짐 = 3;
정수 i = 0;
이중 lt = getLots() ; // 최소 로트
새로 고침();
정수 합계 = OrdersTotal();
정수 티켓 = -1;
을 위한(;;)
{
정수 플래그 = GetEma();
if (플래그 변경 != 플래그 )

매개변수가 없는 for 문? - 의미? 영원한 루프는 다르게 작성되며 두 번째는 어드바이저를 위한 전역 변수입니다. 터미널이 아니라 코드 맨 처음에 모든 함수와 start() 함수 앞에 설명되어 있습니다. ) 함수는 각 틱에서 호출됩니다 . 그런 다음 이 플래그를 이전 상태와 비교하려고 시도하지만 상태는 항상 false입니다.

손을 시도하기 시작했다면 코드 기반에서 기성 고문을 선택 하고 시장 진입 조건을 자신의 것으로 변경하십시오. 더 빠를 것입니다.


 
MarkTrade :

나는 mq4를 배우기 시작했고, 즉시 이해할 수 없는 순간에 부딪쳤다.

말하자면 펜 테스트. ma에 대한 간단한 고문을 작성했습니다. 그리고 이제 그는 역사조차 거래하고 싶지 않습니다. 그래도 오류는 발생하지 않습니다.

내가 어디서 망쳤는지 말해줘?


그리고 어떤 목적으로 고문이 집착합니까?

 for (;;) {


}