[아카이브!] 포럼을 어지럽히 지 않도록 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 2. - 페이지 403

 
ruslanchik :
스택 크기를 계산하는 방법을 알려주세요

귀하의 질문에 대해 더 구체적으로 말씀해 주십시오.
 

최적화에서 불필요한 단계를 건너뛰고 다음 단계로 넘어갈 수 있습니까?

예: 최적화해야 하는 입력 매개변수( 이중 유형 )가 있습니다. x1, x2, x3, x4 해당 값은 1에서 5까지입니다. 단계 0.1

이 경우 41 * 41 * 41 * 41 = 2 825 761 검색 옵션이 있음이 분명합니다.

그러나 다음과 같은 제약 조건에서 검색해야 합니다. 10.5 < x1+x2+x3+x4 < 11.5 그리고 여기에서 열거 옵션이 훨씬 더 적을 것이라는 점은 이미 분명합니다. (즉, 금액에 대한 이러한 제한이 필요합니다)

따라서 이 제한이 EA 코드에 다음과 같이 추가되면:

 extern double     x1= 1 , x2= 1 , x3= 1 , x4= 1 ;

int start()

{

   if ( 10.5 <x1+x2+x3+x4 && x1+x2+x3+x4< 11.5 )

    {
       // основной код эксперта 

    }
   return ; 

} 

그런 다음 최적화하는 동안(각각의 새 틱이 도착할 때) 적합하지 않은 옵션이 사용됩니다(예: x1= 4 , x2= 4 , x3= 4 , x4= 4 ). 확실히 되지 않는 것은 메인 코드의 실행입니다.

즉, 이 최적화 단계가 기록 간격을 "누출" 때까지 다음 단계로의 전환이 없습니다. 조건 10.5 < x1+x2+x3+x4 < 11.5가 충족되지 않는다는 "믿음" 이 있을 것이며 이는 주 코드의 작업이 실행/계산되는 것을 방지할 뿐입니다.

그러한 명백하게 부적절한 선택을 위한 시간은 무의미하게 낭비될 것입니다.

조건에 분명히 적합하지 않은 매개변수를 사용하여 최적화에서 그러한 단계의 실행을 어떻게 제외할 수 있습니까?

즉, 다음 매개변수 세트가 부적합해지면 이 단계가 최적화되지 않고 즉시 새 단계로 넘어갑니다.

 
fmql :

최적화에서 불필요한 단계를 건너뛰고 다음 단계로 넘어갈 수 있습니까?


3개의 매개변수를 최적화하고 네 번째 매개변수를 원하는 양으로 조정할 수 있습니다.

또는 세 번째 탭 "최적화"를 사용하여 원하는 이벤트를 자발적으로 생성합니다.

 
sergeev :

3개의 매개변수를 최적화하고 네 번째 매개변수를 원하는 양으로 조정할 수 있습니다.

또는 세 번째 탭 "최적화"를 사용하여 원하는 이벤트를 자발적으로 생성합니다.

문제는 제 경우에는 4번째 매개변수 없이 3개 매개변수를 최적화하는 것이 불가능하다는 것입니다.

여기에서 중요한 것은 공동 선택이며, 그 합은 간격으로 제한됩니다.

(이것은 혼합물의 모든 성분의 비율을 찾는 것과 같으며 이 혼합물의 총 질량은 엄격한 간격으로 제한됩니다)

세 번째 책갈피, 어떤 종류의 자발적인 원하는 이벤트 발생에 대해 더 자세히 가능합니까?

 

안녕하세요.

ZigZag 표시기의 마지막 극값의 캔들 값(High, Low, Open, Close)을 추출하는 방법을 알려주십시오.

 
다른 촛불처럼. 같은 기능. (당신의 행성의 지름을 생각하십시오. (c) )
 
마지막 극값의 막대 번호를 가져와야 하는 경우 마지막 광선의 개체 이름으로 막대의 시간에 해당하는 첫 번째 좌표 의 시간을 얻습니다 . 마디의 시간으로 마디의 수를 결정하십시오. 막대 번호로 막대의 특성을 결정하십시오.
 
fmql :

세 번째 책갈피, 어떤 종류의 자발적인 원하는 이벤트 발생에 대해 더 자세히 가능합니까?


자세한 내용은 도움말

요컨대 - 세 번째 탭에서 항목에 대한 고유한 조건을 만들 수 있습니다(예: 연속 10개의 실패 주문 열기). 그러면 테스터는 자동으로 이 실행을 건너뛰고 다음 실행으로 넘어갈 것입니다.

 
Stells :

안녕하세요.

ZigZag 표시기의 마지막 극값의 캔들 값(High, Low, Open, Close)을 추출하는 방법을 알려주십시오.


이 작업에는 몇 가지 관련 계산이 필요합니다.

나는 이것을 하곤 했다:

 int start()
  {
 double // экстремумы Зиг-Зага
  y3= 0 , 
   y2= 0 ,
    y1= 0 ,
     y0,
     zz;   
 int     x3, x2, x1, sh=ShiftBars; // номера баров  

  y0= iCustom ( NULL , 0 , "ZigZag" , ExtDepth, ExtDeviation, ExtBackstep, 0 , 1 );

//=============================================================================
   // Берём три экстремума Зиг-Зага
   while (y3== 0 ) 
      {
      zz= iCustom ( NULL , 0 , "ZigZag" , ExtDepth, ExtDeviation, ExtBackstep, 0 , sh);
       if (zz!= 0 && zz!= EMPTY_VALUE ) 
         {
         if       (y1== 0 ) { x1=sh; y1=zz; }
         else if (y2== 0 ) { x2=sh; y2=zz; }
         else if (y3== 0 ) { x3=sh; y3=zz; }
         }
      sh++;

//----- Вывод информации на экран -----------------------------------------------
string info= "" ;
string on_off= "---------------------------------------------------" +   "\r\n" ;

on_off= StringConcatenate (on_off, "Экстремум= " ,y1, " на " ,x1, " баре" , "\r\n" );
on_off= StringConcatenate (on_off, "Экстремум= " ,y2, " на " ,x2, " баре" , "\r\n" );
info= StringConcatenate (info,on_off, "\r\n" );
info= StringConcatenate (info, "\r\n" );
Comment (info);    

이제 마지막 2개의 극한값(최소값 및 최대값)에 있는 막대의 수와 최고값, 최고값을 알 수 있습니다. 찾기가 쉽습니다!

- 닫기[x1], 열기[x2], .... 등

아마도 누군가가 더 쉬운 옵션을 제공할 것입니다.

 
반복할 수 없으며 X와 Y는 항상 0입니다.
 //+------------------------------------------------------------------+
//|                                                    для лавин.mq4 |
//|                      Copyright © 2011, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link       "http://www.metaquotes.net"
extern double stoploss= 0 ; extern double takeprofit= 20 ; extern int otstup= 20 ; extern datetime expiration= 0 ;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
 int tiket,tikett; double volume= 0.1 ; int i= 0 ,R1= 0 ,R2= 0 ,A= 1 ; double price= PRICE_OPEN ;
   //  R1=((PRICE_OPEN- stoploss*Point)*stoploss)/stoploss;R2=((PRICE_OPEN+ stoploss*Point)*stoploss)/stoploss;
     
     
int start()
  {       int X,Y; double price=(Ask+Bid)/ 2 ;            
//----
       Alert ( "OrdersTotal()" , OrdersTotal ());

if (OrderSymbol()== Symbol ()&&OrderMagicNumber( )== 1000 ){
 for ( int i= OrdersTotal ();i== 0 ;i--){
OrderSelect (i,SELECT_BY_POS ); if (OrderType( )==OP_BUYSTOP){X++;}}} Alert ( "X" , X);
if (X== 0 ){


   tiket= OrderSend ( Symbol (), OP_BUYSTOP,  volume*A, price +otstup* Point , Point * 3 , R1, price+takeprofit* Point +otstup* Point , "OP_BUYSTOP" , 1000 ,  expiration, Red ); 
   Alert ( "OP_BUYSTOP" , GetLastError ( )); }
   
if ( OrderMagicNumber( )== 2000 &&OrderSymbol()== Symbol ()) { 
   for ( i= OrdersTotal ();i== 0 ;i--){ OrderSelect (i,SELECT_BY_POS );
if (OrderType( ) ==OP_SELLSTOP) { Y++;}}} Alert ( "Y" , Y);
 if (Y== 0 ){ 
   tikett= OrderSend ( Symbol (), OP_SELLSTOP,  volume*A, price -otstup* Point , Point * 3 ,R2, price-takeprofit* Point -otstup* Point , "OP_SELLSTOP" , 2000 ,  expiration, C'0,128,255' );
     Alert ( "OP_SELLSTOP" , GetLastError ( )); 
    }       
   
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+