[ARCHIVE!] フォーラムを散らかさないように、どんなルーキーの質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしではどこにも行けない - 4. - ページ 257

 
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 VinI_CheckTime EURUSD,Daily: TimeFrame: 1 TimeOpen: 00:00 Bar: 1057

2012.07.17 20:42:45 VinI_CheckTime EURUSD,Daily: TimeFrame: 5 TimeOpen: 00:00 Bar: 212

2012.07.17 20:42:45 VinI_CheckTime EURUSD,Daily: TimeFrame: 15 TimeOpen: 00:00 Bar: 70

2012.07.17 20:42:45 VinI_CheckTime EURUSD,Daily: TimeFrame: 30 TimeOpen: 00:00 Bar: 35

2012.07.17 20:42:45 VinI_CheckTime EURUSD,Daily: TimeFrame: 60 TimeOpen: 00:00 Bar: 17

2012.07.17 20:42:45 VinI_CheckTime EURUSD,Daily: TimeFrame: 240 TimeOpen: 00:00 Bar: 4


 

ひとことお願いします。

トレンドが変わると色が変わるマルチタイムフレームのMAを作りたいのですが、どうすればいいですか?他のタイムフレームからの平均価格表示も行いましたが、色が変わってしまう問題を解決する方法がわかりません。

//+------------------------------------------------------------------+
//|                                                      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を始値で走らせる必要があります。フクロウはオープンオン分で走らせた方が良い。そして、TFを、明示的に処方した方が良いのです!
Romanさん、Strategy Testerに表示させるインジケータを作ろうとしています。この指標は、分析に低い時間枠を使用しています。
 
FAQ:
コード全体を表示して、"SRC"ボタンで貼り付けられるとよりよいでしょう。

OK、この投稿にコードを追加してみます。

私は長い間トレードをしてきましたが、プログラミングを始めたのは、自分が何をプログラムしたいのかがはっきり分かってからです。

私の目標は、3つのスリップの上にあるすべてのバーのクローズで緑の矢印を取得し、3つのすべての下に閉じたすべての閉じたバーで、チャートにアタッチした後に閉じたバーに対してのみ赤の矢印を取得することです。今のバーには興味がない。

この矢印は、インジケータを貼り付けている間はチャートに表示され、その後取り外したい。

今はわかりやすくするためだけにスライダーを描いていますが、その後はEAから削除します。

現在、いくつかのスライダーと矢印がありますが、それらは現在表示されたり消えたりして、間違ったバーの上に表示されています。そこが理解できないのです。

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で実行)。

そして、これが私の得たものです。


価格を開く ことでテスターにチェックインするのです。だから、ローマンはすでにその方法を書いている。

 
つまり、ローエンドのTFでテスターを実行し、上位のTFに適合するようにインジケーターの他のすべてのロジックを修正するのですか?
 
ilunga:

直前のバーの終値 Close[1].

ありがとうございました。EAはティックで取引していますが、間隔(ローソク足)で取引するように変更できますか?すごく迷っているんです。
 

このスレッドにごきげんよう!インジケータはコンパイルされるけど何も描画されないし、何が悪いのか、何をどう考えればいいのか、バグの探し方がわからない。とにかく、コードは動作し、最小限の変更で関数を追加しましたが、今は全く何もしません!!!!

グリッドから始まる宣言のどこかに問題があるのかもしれないし、私が遅すぎてぐちゃぐちゃになっているのかもしれない...。効いていたんですねー。

//+------------------------------------------------------------------+
//|                                            ИндюкДимонакомпил.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;
}
 
skyjet:
ありがとうございました。ティックで取引するEAですが、インターバル(ローソク足)で取引するように変更することは可能ですか?私はそれで完全に混乱しています。

なかなか言いにくいのですが、私はそのようにしたことがありません。なんとなくバーやローソク足を覚えておいて、次が出たら...何かが起きている、というのが必要かもしれませんね。start関数の中に書かれたコードがtickごとに 実行され、そこにすでに書かれているのがプログラマーの書いたものです。