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

 

조언 감사합니다. 다 잘되는데 인디케이터를 설치하면 이상하게 그려집니다.(차트 참조) 차트 창의 왼쪽 가장자리에서 노란색 수직선까지 들여쓰기(막대)는 항상 창에 표시되는 막대의 개수에 관계없이 일정하며 8개의 막대와 같습니다. 이 8개의 막대가 창의 왼쪽 경계를 넘어가면 즉시 모든 차트 라인이 나타나고 모든 것이 잘 됩니다. 이 문제를 해결할 수 있고 어떻게 해야 합니까?


#property indicator_separate_window
#property indicator_buffers 4
#property indicator_color1 Lime
#property indicator_color2 Red
#property indicator_color3 Aqua
#property indicator_color4 DarkOrange
#property  indicator_width1  2
#property  indicator_width3  2
//--- buffers
double Macd1Buffer[];
double Signal1Buffer[];
double Macd2Buffer[];
double Signal2Buffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,Macd1Buffer);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,Signal1Buffer);
   SetIndexStyle(2,DRAW_LINE);
   SetIndexBuffer(2,Macd2Buffer);
   SetIndexStyle(3,DRAW_LINE);
   SetIndexBuffer(3,Signal2Buffer);
   
   IndicatorDigits(Digits);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   Comment("");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {   
      double max1=-0.01,min1=0.01,
             max2=-0.01,min2=0.01,
             max_M1=-0.01,min_M1=0.01,
             max_M2=-0.01,min_M2=0.01,
             max_S1=-0.01,min_S1=0.01,
             max_S2=-0.01,min_S2=0.01;
             
       
 
   int bars_counted=WindowBarsPerChart()-1,
       limit;  
       limit=bars_counted;       


      
//---- macd counted in the 1-st buffer
   for(int i=0; i<limit; i++)
   
   { 
     Macd1Buffer[i]=iMA(NULL,0,6,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,12,0,MODE_EMA,PRICE_CLOSE,i);
     Macd2Buffer[i]=iMA(NULL,0,12,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,26,0,MODE_EMA,PRICE_CLOSE,i);
      
           max_M1=MathMax(Macd1Buffer[i],max_M1);
           min_M1=MathMin(Macd1Buffer[i],min_M1);
           
           max_M2=MathMax(Macd2Buffer[i],max_M2);
           min_M2=MathMin(Macd2Buffer[i],min_M2);
   }
   
   for( i=0; i<limit; i++)
           
   {
      Signal1Buffer[i]=iMAOnArray(Macd1Buffer,Bars,5,0,MODE_SMA,i);
      Signal2Buffer[i]=iMAOnArray(Macd2Buffer,Bars,9,0,MODE_SMA,i);
      
           
           max_S1=MathMax(Signal1Buffer[i],max_S1);
           min_S1=MathMin(Signal1Buffer[i],min_S1);
           
           max_S2=MathMax(Signal2Buffer[i],max_S2);
           min_S2=MathMin(Signal2Buffer[i],min_S2);         
   }          
           max1=MathMax(max_M1,max_S1);
           min1=MathMin(min_M1,min_S1);
             
           
            
      

//---- done 
   
 
      Comment( "\n"," Баров = ",WindowBarsPerChart()-1,
               "\n"," max_M1 = ",max_M1,
               "\n"," min_M1 = ",min_M1,
               "\n"," max_S1 = ",max_S1,
               "\n"," min_S1 = ",min_S1,
               "\n"," max_M2 = ",max_M2,
               "\n"," min_M2 = ",min_M2,
               "\n"," max_S2 = ",max_S2,
               "\n"," min_S2 = ",min_S2,
               "\n"," max1 = ",max1,
               "\n"," min1 = ",min1,    
               "\n"," max2 = ",max2,
               "\n"," min2 = ",min2);
         
             
         
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
MK07 :

조언 감사합니다. 다 잘되는데 인디케이터를 설치하면 이상하게 그려집니다.(차트 참조) 차트 창의 왼쪽 가장자리에서 노란색 수직선까지 들여쓰기(막대)는 항상 창에 표시되는 막대의 개수에 관계없이 일정하며 8개의 막대와 같습니다. 이 8개의 막대가 창의 왼쪽 경계를 넘어가면 즉시 모든 차트 라인이 나타나고 모든 것이 잘 됩니다. 이 문제를 해결할 수 있고 어떻게 해야 합니까?


이렇게 시도

   int limit;
   int counted_bars= IndicatorCounted ();
   if (counted_bars> 0 ) counted_bars--;
   limit= Bars -counted_bars;
 
이 코드 구성은 각각의 새로운 틱이 0과 첫 번째(검증용) 막대에서만 표시기를 다시 계산할 수 있도록 하고 이미 계산된 표시기를 다시 계산하지 않도록 합니다. 이 섹션에서는 이전 게시물에 표시된 문제를 해결하도록 도와주세요. 예를 들어 모든 내용을 이해하지 못합니다. 이 세 줄을 한 줄씩 설명할 수 있는 사람이 있습니까?
 // обработка видимых баров.
   int bars_count=WindowBarsPerChart();
   int bar=WindowFirstVisibleBar();
   for(int i=0; i<bars_count; i++,bar--)
     {
      // номера баров уменьшаются, так как нумерация идет в обратном порядке.
      // ...
     } 
 
MK07 :
이 코드 구성은 각각의 새로운 틱이 0과 첫 번째(검증용) 막대에서만 표시기를 다시 계산할 수 있도록 하고 이미 계산된 표시기를 다시 계산하지 않도록 합니다. 이 섹션에서는 이전 게시물에 표시된 문제를 해결하도록 도와주세요. 예를 들어 모든 내용을 이해하지 못합니다. 이 세 줄을 한 줄씩 설명할 수 있는 사람이 있습니까?

표시기의 MAX 및 MIN 가시 막대 를 찾아야 하는 경우 먼저 표시기를 그린 다음 검색해야 하는 경우 필요한 것이 완전히 명확하지 않습니다.

WindowPriceMax(), WindowPriceMin() 을 사용하는 것이 더 나을 수도 있습니다.

 
r772ra :

스테판2

공장


결국 배열에 결함이 있지만 동안

c 문제가 없는 작업을 위해

))

 

안녕하세요.

여러분, 조언자를 테스트하는 방법을 알려주세요. 내장된 MT가 모델링 품질의 평균 50%를 제공하고 사람들이 스크린샷에 90% 이상을 게시하기 때문입니다.

 
jusser :

안녕하세요.

여러분, 조언자를 테스트하는 방법을 알려주세요. 내장된 MT가 모델링 품질의 평균 50%를 제공하고 사람들이 스크린샷에 90% 이상을 게시하기 때문입니다.


전체 분 기록이 있는 경우 90%가 됩니다. 99%는 fxt 틱 기록 을 직접 생성하여 달성합니다. 이것은 일반적으로 dukascopy 인용문을 사용하여 수행됩니다. Google에서 99% 테스트 품질과 관련된 스크립트를 검색합니다.

 
좋은 오후입니다. MT4에 미결제약정을 나타내는 지표가 있습니까? 그렇지 않은 경우 유사한 것으로 대체할 수 있습니까?
 
좋은 오후, 동일한 유형의 주문이 마지막 주문에서 50 포인트 배치되도록 어드바이저 코드에서 조건을 구현하는 방법
 
Armen63 :
좋은 오후, 동일한 유형의 주문이 마지막 주문에서 50 포인트 배치되도록 어드바이저 코드에서 조건을 구현하는 방법
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает расстояние в пунктах между рынком и ближайшей       |
//|             позицей                                                        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    op - торговая операция          (    -1      - любая позиция)           |
//|    mn - MagicNumber                (    -1      - любой магик)             |
//+----------------------------------------------------------------------------+
int DistMarketAndPos( string sy= "" , int op=- 1 , int mn=- 1 ) {
   double d, p;
   int i, k= OrdersTotal (), r= 1000000 ;

   if (sy== "" || sy== "0" ) sy= Symbol ();
  p= MarketInfo (sy, MODE_POINT);
   if (p== 0 ) if ( StringFind (sy, "JPY" )< 0 ) p= 0.0001 ; else p= 0.01 ;
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
       if (( OrderSymbol ()==sy) && (op< 0 || OrderType ()==op)) {
         if (mn< 0 || OrderMagicNumber ()==mn) {
           if ( OrderType ()==OP_BUY) {
            d= MathAbs ( MarketInfo (sy, MODE_ASK)- OrderOpenPrice ())/p;
             if (r>d) r= NormalizeDouble (d, 0 );
          }
           if ( OrderType ()==OP_SELL) {
            d= MathAbs ( OrderOpenPrice ()- MarketInfo (sy, MODE_BID))/p;
             if (r>d) r= NormalizeDouble (d, 0 );
          }
        }
      }
    }
  }
   return (r);
}