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

 
dzhini :

TESTER가 현재 시간 내에서 더 낮은 시간대의 막대 번호를 결정하기 위한 조건을 어떻게 규정할 수 있는지 알려주십시오.

예: 테스터에서 H1이 시작된 다음 현재 TF에서 n번째 촛불의 시작 시간이 결정됩니다. 다음 단계는 동시에 시작된 촛불의 수를 결정하는 것입니다. . iBarShift는 지속적으로 0을 씁니다. 막대 계산을 담당하는 블록은 다음과 같습니다.

당신은 할 수 없습니다. 테스터에서는 이 올빼미에 사용된 최소 TF-me 에서 개시 가격 으로 올빼미를 실행해야 합니다. 1분 동안 열어두는 것이 좋습니다. 또한 TF를 처방하는 것이 가장 좋습니다 - 분명히!
 
dzhini :
유리 씨, 조금 더 높은 제 질문에 대해 말씀해 주시겠습니까?


확인할 스크립트

 //+------------------------------------------------------------------+
//|                                             VininI_CheckTime.mq4 |
//|                                            Copyright 2012, Vinin |
//|                                                    vinin@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, Vinin"
#property link       "vinin@mail.ru"



//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----
   int TimeFrame[]={ PERIOD_MN1 , PERIOD_W1 , PERIOD_D1 , PERIOD_H4 , PERIOD_H1 , PERIOD_M30 , PERIOD_M15 , PERIOD_M5 , PERIOD_M1 };
   int i, pos;
   for (i= 0 ;i< ArraySize (TimeFrame);i++) {
       if ( Period ()<TimeFrame[i]) continue ;
      pos=i;
       break ;
   }
   for (i=pos+ 1 ;i< ArraySize (TimeFrame);i++) {
       int tmp= iBarShift ( NULL , TimeFrame[i], Time[ 0 ], true);
       if ( iTime ( NULL , TimeFrame[i], tmp)<Time[ 0 ])tmp--;
       Print ( "TimeFrame: " ,  TimeFrame[i], " TimeOpen: " , TimeToStr ( iTime ( NULL , TimeFrame[i], tmp), TIME_MINUTES), " Bar: " , tmp);
      
   
   
   }
   
   
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+

결과

2012.07.17 20:42:45 VininI_CheckTime EURUSD,일일: TimeFrame: 1 TimeOpen: 00:00 Bar: 1057

2012.07.17 20:42:45 VininI_CheckTime EURUSD,일일: TimeFrame: 5 TimeOpen: 00:00 Bar: 212

2012.07.17 20:42:45 VininI_CheckTime EURUSD,매일: TimeFrame: 15 TimeOpen: 00:00 Bar: 70

2012.07.17 20:42:45 VininI_CheckTime EURUSD,일일: TimeFrame: 30 TimeOpen: 00:00 Bar: 35

2012.07.17 20:42:45 VininI_CheckTime EURUSD,일일: TimeFrame: 60 TimeOpen: 00:00 Bar: 17

2012.07.17 20:42:45 VininI_CheckTime EURUSD,일일: TimeFrame: 240 TimeOpen: 00:00 Bar: 4


 

알려주세요:

역학을 변경할 때 색상이 변경되는 다중 시간 프레임 MA를 만들고 싶습니다. 다른 TF들의 평균 가격을 표시해 보았지만 여전히 색상 변경 문제를 해결하는 방법을 모르겠습니다.

 //+------------------------------------------------------------------+
//|                                                      MA-MTFC.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link       "http://www.metaquotes.net"

#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Yellow
#property indicator_color2 Green
#property indicator_color3 Red
//+------------------------------------------------------------------+
extern int MA_TF= 1440 ;
extern int MA_Period= 89 ;
extern int MA_Shift= 0 ;
extern int MA_Method= 2 ;
extern int MA_AP= 0 ;
//+------------------------------------------------------------------+
double Buffer_Yellow[];
double Buffer_Lime[];
double Buffer_Red[];

string Symb;
double MA;

int init()
  {
   Symb= Symbol ();
   //---
   if (MA_TF != 1 )
     if (MA_TF != 5 )
     if (MA_TF != 15 )
       if (MA_TF != 30 )
       if (MA_TF != 60 )
         if (MA_TF != 240 )
         if (MA_TF != 1440 )
           if (MA_TF != 10080 )
           if (MA_TF != 43200 )
             if (MA_TF != 0 )
             return ;
   //---
   SetIndexBuffer ( 0 ,Buffer_Yellow);
   SetIndexBuffer ( 1 ,Buffer_Lime);
   SetIndexBuffer ( 2 ,Buffer_Red);
   //---
   SetIndexStyle ( 0 , DRAW_LINE );
   SetIndexStyle ( 1 , DRAW_LINE );
   SetIndexStyle ( 2 , DRAW_LINE );
   //---
   return ( 0 );
  }

int deinit()
  {

   return ( 0 );
  }

int start()
  {
   double MA;
   int counted_bars= IndicatorCounted ();
   int limit= Bars -counted_bars- 1 ;
   if (limit> 1 ) 
      limit= Bars - 1 ;
      
   for ( int i=limit- 1 ;i>= 0 ;i--)
    {
       int pos= iBarShift ( NULL , MA_TF, Time[i]);
      MA= iMA (Symb,MA_TF,MA_Period,MA_Shift,MA_Method,MA_AP,pos);
      
      Buffer_Yellow[i]=MA;
      Buffer_Lime[i]=MA;
      Buffer_Red[i]=MA;
      
       if (Buffer_Yellow[i]>Buffer_Yellow[i+ 1 ])
       {
         Buffer_Red[i]= EMPTY_VALUE ;
       }
       else if (Buffer_Yellow[i]<Buffer_Yellow[i+ 1 ])
       {
         Buffer_Lime[i]= EMPTY_VALUE ;
       }
       else
       {
        Buffer_Red[i]= EMPTY_VALUE ;
        Buffer_Lime[i]= EMPTY_VALUE ; 
       }
      
    }

   return ( 0 );
  }
 
Roman. :
당신은 할 수 없습니다. 테스터에서는 이 올빼미에 사용된 최소 TF-me에 올빼미를 시작 가격으로 시작해야 합니다. 1분 동안 열어두는 것이 좋습니다. 또한 TF를 처방하는 것이 가장 좋습니다 - 분명히!
로만, 어드바이저가 우편열차로 중국에 도착하는 것과 같을 때까지 테스터에 인디케이터가 표시될 수 있도록 하려고 합니다. 분석을 위해 지표는 더 낮은 TF를 사용합니다.
 
FAQ :
전체 코드를 표시하고 " SRC " 버튼을 사용하여 붙여넣는 것이 좋습니다.

알겠습니다. 이 게시물에 코드를 추가해 보겠습니다.

나는 실제로 내가 결국 무엇을 성취하고 싶은지 알고 있습니다. 저는 오랫동안 거래를 해왔지만 정확히 내가 프로그래밍하고 싶은 것이 무엇인지 깨달은 후에야 프로그래밍을 시작했습니다.

이제 내 목표는 3가지 이동 평균 이상에서 닫히는 모든 막대에 녹색 화살표를 표시하고 3가지 모두 아래에서 닫힌 모든 닫힌 막대에 빨간색 화살표를 표시하고 차트에 연결된 후 닫힌 막대에 대해서만 표시하는 것입니다. 현재 막대는 관심이 없습니다.

지표가 차트에 부착된 다음 제거되는 동안 이 화살표를 차트에 표시하고 싶습니다.

지금은 명확성을 위해서만 이동 평균을 그린 다음 어드바이저에서 제거합니다.

지금 일어나는 일은 이동 평균이 있고 일부 화살표가 있지만 나타나거나 사라지고 잘못된 막대에 나타납니다. 이것은 내가 이해하지 못하는 것입니다.

106-111행에 있는 j 또는 j+1과 이를 연결할 버퍼 요소를 엉망으로 만든 것 같습니다.


조언해주시면 감사하겠습니다.


어떤 이유로 SRC 버튼이 작동하지 않습니다. 평소 mq4와 같이 파일을 삽입하려고 합니다.

파일:
t11.mq4  5 kb
 
Vinin :


확인할 스크립트

내 목표에 따라 코드를 수정하고 확인하기로 결정했습니다(H1에서 실행했습니다).

   for (i= 0 ;i< 10 ;i++) {
       int tmp= iBarShift ( NULL , PERIOD_M15 , Time[i], true);
       if ( iTime ( NULL , PERIOD_M15 , tmp)<Time[i])tmp--;
       Alert ( " TimeOpen: " , TimeToStr ( iTime ( NULL , PERIOD_M15 , tmp), TIME_MINUTES), " Bar: " , tmp);  
   }

그리고 그 일이 일어났습니다

 
dzhini :

내 목표에 따라 코드를 수정하고 확인하기로 결정했습니다(H1에서 실행했습니다).

그리고 그 일이 일어났습니다


시가는 테스터 에서 확인하세요. 그래서 로만은 이미 그것을 하는 방법을 썼습니다.

 
저것들. 더 낮은 기간에 테스터를 실행하고 이전 기간에 대한 표시기의 나머지 논리를 다시 작성합니까?
 
ilunga :

마지막 막대의 종가 닫기[1]

정말 감사합니다! 그래서 어드바이저는 틱으로 거래하는데 인터벌(촛대)로 거래할 수 있나요? 나는 이것과 완전히 혼란 스럽다.
 

이 스레드에 좋은 하루! 알다시피, 표시기는 컴파일되지만 아무 것도 그리지 않으며 무엇이 잘못되었는지, 무엇을 생각해야 하는지, 오류를 찾는 방법을 잘 모릅니다. 일반적으로 코드는 작동했으며 최소한의 변경으로 기능을 추가했지만 전혀 작동하지 않습니다!!

아마도 문제는 내가 다시 촬영으로 시작하는 발표의 어딘가에있을 수 있습니다. 아마도 나는 일반적으로 두뇌 속도를 늦추고 무언가를 엉망으로 만들고 있습니다 .. 그것이 작동 한 방식입니다!

 //+------------------------------------------------------------------+
//|                                            ИндюкДимонакомпил.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link       "http://www.metaquotes.net"
#import "user32.dll"
   int    PostMessageA( int   hWnd, int   Msg, int   wParam, string lParam);
#import
#define WM_COMMAND                     0x0111
int delimiter = 0 ;

#property indicator_chart_window
double ВерхняячертаBuffer1[];
double НижняячертаBuffer2[];
double СинняячертаBuffer3[];
 double вершина; 
 double основание_первого_снижения;
 double начало;
 double вершина_волны_3;
 extern int T= 4 ,K= 200 ;
 int timeframe, start ;
 int бар_вершина ;
 int бар_основание_первого_снижения;
 int бар_начало;
int pereklutsatel;
double naklon,linija2; int P; extern int RO= 49 ;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int     counted_bars= IndicatorCounted ();
   int limit= Bars -counted_bars- 1 ;

   for ( int i=limit;i>= 0 ;i--) {
//----
 for ( int J= 0 ;J<=RO;J++){
//----

   // for(int i=Bars; i>=0;i--)
   i= Bars ;
      бар_вершина= iHighest ( NULL ,  timeframe, MODE_HIGH, K, start ) ;
       вершина =High[ бар_вершина ];
       бар_основание_первого_снижения= iLowest ( NULL ,  timeframe, MODE_LOW, NormalizeDouble ( бар_вершина/ 2 , 0 ), start ) ;
       основание_первого_снижения=Low[ бар_основание_первого_снижения ];
       бар_начало= iLowest ( NULL ,  timeframe, MODE_LOW, NormalizeDouble (бар_вершина* 1.5 , 0 ), бар_вершина ) ;
       начало=Low[ бар_начало ];
       
         
   if (начало>основание_первого_снижения){naklon=(начало-основание_первого_снижения)/(бар_начало-бар_основание_первого_снижения);
  
    НижняячертаBuffer2[бар_начало]=начало;linija2=начало; for (i=бар_начало- 1 ;i>= 0 ;i--){linija2=linija2-naklon;
    
    НижняячертаBuffer2[i]=linija2;
     
   }
    НижняячертаBuffer2[бар_основание_первого_снижения]=основание_первого_снижения;}
    
    
         for (i= 0 ;i< 100 ;i++){  СинняячертаBuffer3[i]= Open[i];}
           for (i= 330 ;i< 500 ;i++){  СинняячертаBuffer3[i]= Open[i];}

     ВерхняячертаBuffer1[бар_начало]=начало;
     
 double точка 4 ; int бар_точка 4 ;   бар_точка 4 = iHighest ( NULL ,  timeframe, MODE_HIGH, бар_основание_первого_снижения, 3 ) ; 
  точка 4 =High[ бар_точка 4 ];  
   
   if (вершина>точка 4 ){naklon=(начало-точка 4 )/(бар_начало-бар_точка 4 );  
   double linija1=начало; for (i=бар_начало- 1 ;i>= 0 ;i--){linija1=linija1-naklon;ВерхняячертаBuffer1[i]=linija1; }}
   
double vulf=НижняячертаBuffer2[ 0 ];
   if ( vulf==Ask&&vulf==Bid)vulf= 1 ;
   else { for (vulf=vulf+ Point * 10 ; vulf==НижняячертаBuffer2[ 0 ];vulf=vulf- Point ){
           if ( vulf==Ask&&vulf==Bid){vulf= 1 ;}} 
       for (vulf=vulf- Point * 10 ; vulf==НижняячертаBuffer2[ 0 ];vulf=vulf+ Point ){
           if ( vulf==Ask&&vulf==Bid)vulf= 1 ;} 
              
           
           
           }
           
           
   if (vulf== 1 ){ Comment ( "  Есть вульв!!! "   , "  timeframe " , timeframe); return ( 0 );  }
     if (vulf!= 1 &&pereklutsatel== 1 ) {    
   
     if (delimiter< 3 ){delimiter++; Comment (delimiter); return ( 0 );}
   delimiter= 0 ;
    fChangePeriod();P++;
                                 
                   }  } }
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+

void fChangePeriod(){ int ii,hwd = WindowHandle ( Symbol (), Period ());
   switch ( Period ()){
       case PERIOD_W1     : ii = 33134 ; break ; //PERIOD_D1;
       case PERIOD_D1     : ii = 33136 ; break ; //PERIOD_H4;
       case PERIOD_H4     : ii = 33135 ; break ; //PERIOD_H1;
       case PERIOD_H1     : ii = 33140 ; break ; //PERIOD_M30;
       case PERIOD_M30    : ii = 33139 ; break ; //PERIOD_M15;
       case PERIOD_M15    : ii = 33138 ; break ; //PERIOD_M5;
       case PERIOD_M5     : ii = 33137 ; break ; //PERIOD_M1;
       case PERIOD_M1     : ii = 33141 ; break ; //PERIOD_W1;
   }     
   PostMessageA(hwd, WM_COMMAND, ii, 0 );
   return ;
}