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

 
nlp2311:

この解明をよろしくお願いします。ラインを正しく表示させたい。でも、バッファはただの線を出すだけで、ピボットラインのように途中で平らになるはずなのですが......。前日のX時間の水準から来る線がある。

を解明してください...。わからない((((;゚Д゚)))))))))

さて、どの時間枠でも、もちろん日足ではなく、もっと小さな時間枠で5時の方向にマービングを 取る必要があるとしましょう。1時以下からとしましょう。

そして、翌日の5時に向けて描き出す。その方法を紹介します。

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Blue
#property indicator_width1 2
//==============================
extern int    hour = 5;
extern int    hrma = 4;
//==============================
double fx[];
double mai;
int p,hr,hrp;
//************************************************************
int init()  
{   
   SetIndexBuffer(0,fx);
   
   p=hrma*60/Period(); // пересчет периода мувинга на любой таймфрейм
   
   return(0);
}
//************************************************************
int start()
{
   int cbi=Bars-IndicatorCounted()-1; if (cbi<0) return(-1);
   if (cbi==1) cbi--;
   if (cbi>1) cbi=Bars-p-1;
   //-------------------------------
   for(int i=cbi; i>=0; i--)
   {
      hrp=TimeHour(Time[i+1]); 
      hr=TimeHour(Time[i]);
      
      if (hr==hour && hrp!=hr) mai=iMA(NULL,0,p,0,0,0,i); // сам простой мувинг, в момент, когда час равен нашему и не неравен на предыдущем баре
      
      fx[i]=mai; // просто приравнивание индикаторного буффера к глобальной переменной 
   }
  
   return(0);
}
//***************************************************************
 

そうです、同じ答えです。

ti=Time[i]; // время текущего бара
      
      tiip=tii; // предыдущее состояние времени
      tii=(ti-dth)/dtd*dtd;// время начала суток сдвинутое на нужный нам час
      
      if (tiip!=tii)

が、結果は間違っている!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!pythonのスルーを例にとりました。

if(TimeDay(Time[i]) != TimeDay(Time[i+1]))
一般的な見解はこのようなものです

int start()
  {
double LastHigh,LastLow;
int counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
if(Period() > 240)  return(-1);

int LastPrevDay = iBars(Symbol(), PERIOD_D1);
int barnH= iBars(Symbol(),PERIOD_H1);

for (int i = LastPrevDay-1; i >= 0; i--)
{
datetime NowDay = iTime(Symbol(), PERIOD_D1, i);
int PrevDay = iBarShift(Symbol(), PERIOD_D1, NowDay);
datetime LastD =  iTime(Symbol(), PERIOD_D1, i+1);
int LastDay = iBarShift(Symbol(), PERIOD_D1, LastD);

if(TimeDay(Time[i]) != TimeDay(Time[i+1]))
{ 
datetime x_time= StrToTime(TimeToStr(NowDay, TIME_DATE)+" "+shift_time); 
int x_shift= iBarShift(Symbol(),PERIOD_H1,x_time);
double CL= iClose(Symbol(),PERIOD_H1,x_shift);
}

buffer[i]= CL;
}

return(0);
}

というのは、やはり正しい結果ではありません。

問題は、HOWピボットがフラットであるが、ピボットレベルではなく、何時間かの値からラインを置くことは簡単です。それだ!!!!そして、私は苦労して、どのように理解していない...X時間からTime[0]へのラインをRIGHT !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!。

 
nlp2311:

そうです、同じ答えです。

が、結果は間違っている!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!pythonのスルーを例にとりました。

一般的な見方はこのようになります。

というのは、やはり正しい結果ではありません。

問題は、HOWピボットがフラットであるが、ピボットレベルではなく、何時間かの値からラインを置くことは簡単です。それだ!!!!そして、私は苦労して、どのように...X時間からTime[0]までのラインをRANGEするのか理解できません !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

そうですね......もっと簡単な例をそこに書きました。

必要な時間の時点で何らかの値を書いていれば、単純にこの値と等しくなるのです。

for(int i=cbi; i>=0; i--)
{
hrp=TimeHour(Time[i+1]);
hr=TimeHour(Time[i]);

if(hr==hour && hrp!=hr) x=.

fx[i]=x;// インジケータバッファとグローバル変数を 等価にするだけ
}.

ピボットでも何でも同じです。単純に、日足Pivotであれば、このポイントで日足分のバーが計算されます。

例えば、5時台の日足高値はこんな感じです。他のすべてのレベルでも同じことができます。空のインジケータにコードをコピーして、コンパイルして見てください、このくらいでいいかと思います。

もし、全日程を描く必要がなく、最後の1日だけを描くのであれば、少し違った方法で行われます。私は、よりプロフェッショナルなアプローチを提案しているだけです。

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Blue
#property indicator_width1 2
//==============================
extern int    hour = 5;
extern int    hrma = 24;
//==============================
double fx[];
double hm;
int p,hr,hrp;
//************************************************************
int init()  
{   
   SetIndexBuffer(0,fx); SetIndexEmptyValue(0,EMPTY); 
   
   p=hrma*60/Period();
   
   return(0);
}
//************************************************************
int start()
{
   int cbi=Bars-IndicatorCounted()-1; if (cbi<0) return(-1);
   if (cbi==1) cbi--;
   if (cbi>1) cbi=Bars-p-1;
   //-------------------------------
   for(int i=cbi; i>=0; i--)
   {
      hrp=TimeHour(Time[i+1]); 
      hr=TimeHour(Time[i]);
      
      if (hr==hour && hrp!=hr) 
      {
         fx[i+1]=EMPTY;
         hm=High[iHighest(NULL,0,MODE_HIGH,p,i+1)];
      }
      
      fx[i]=hm; 
   }
  
   return(0);
}
//***************************************************************
 
皆さん、こんにちは。チャートにインジケータを 追加する方法は?例えば、iMAのようなある値を計算するEAがあるとします。チャート上にインジケータを描くにはどうしたらよいのでしょうか?そう思います。特殊な機能を使うか、トレンドラインを通じて「手動で」?EAからパラメータを指定してインジケータを表示させる簡単な方法はありますか?
 
Pyro:
皆さん、こんにちは。チャートに配置するのであれば、自分で描く必要はないでしょう。例えば、iMAのような値を計算するEAがあるとします。チャート上にインジケータをどのように描画するのですか?そう思います。特殊な 機能を使うか、トレンドラインを通じて「手動で」?EAからパラメータを指定してインジケータを表示させる簡単な方法はありますか?

私は会ったことがない、多分誰かがトレンドラインを介してマッピングバッファのフォーラム検索を書きました。

自分で書いてもいいし、難しいことは何もない。

 
Pyro:
こんにちは。チャートにインジケータを追加するには?例えば、iMAの値を計算するExpert Advisorがある。チャート上にインジケータを描くにはどうしたらよいのでしょうか?そう思います。特殊な機能を使うか、トレンドラインを通じて「手動で」?EAからパラメータを指定してインジケータを表示させる簡単な方法はありますか?


もしEAがチャートにくっついていて、その中に何かがあるとしたら、それが何であるかを確認するためには、EAと全く同じ機能を持ち、同じパラメータを設定したインジケータを作成し、チャートに適用する必要があります。あるいは、ミュービングなどのMT標準機能であれば、それもチャートに適用し、Expert Advisorと同じパラメータを設定しておく必要があります。Expert Advisor 自身は、チャート上にインジケータを描画することはありません。テスト終了後にストラテジーテスターに描画されます。取引中は行いません。もう一つの方法は、面倒ですが、ダッシュのようなオブジェクトを描くことです。 ObjectCreate(name+Time[0],OBJ_ARROW,0,Time[0],price); ObjectSet(name+Time[0],OBJPROP_ARROWCODE,4); あるいはトレンドラインのセグメント。しかしこの場合は、前のバーでの関数状態を保存する必要があります。しかし、これは、例えば、アスカで何かを描画する必要があり、MTがアスカの配列を格納していない場合や、2つのペアの合成を格納している場合など、インジケータを適用できない場合の話です。だからこそ、それを制御するための工夫が必要なのです。

まあ、必要なものを貼り付けるテンプレート(tpl)を作るという手もあるんですけどね。しかし、現実的には、カスタムインジケーターを作り、手動で新しいプロファイルを設定・書き込み、取引したいときに適切なプロファイルを呼び出せばよいのです。ファンタジー寸前のテクニクスです。

 
Expert Advisorでパラメータが常に変化していると、面倒なことになります。OK、ありがとう同僚たち、これで確信が持てたよ。
 
EAからGVを経由してインジケータに転送する。
 

1) EAとインジケータのパラメータをプリセットしたテンプレートの作成

2)GVを用いた指標へのパラメータ転送

3) WINAPIを使ってEAからチャートにインジケータを呼び出す。

EAからアローオブジェクトでインジケータチャートを描画するのが好きです。

 

敬礼!!!

Open=Close=High=Low-違いはなく、すべての価格が同じで、作成されるファイルに同じ価格の4列があることが理解できません。以下は、EAがデータをアンロードするコードです。

int init()  
  {
   int h=FileOpen("H"+(Period()/60)+".csv",FILE_CSV|FILE_WRITE|FILE_READ,";");
    if(h<1)
      {
      Print("Файл не найден : ", GetLastError());
      return(false);
      }
   FileSeek(h, 0, SEEK_END);
   FileWrite(h,"Date","DayOfWeek","CLOSE","OPEN","High","LOW" );
   FileClose(h);        
  }
int start()
  {
   int h=FileOpen("H"+(Period()/60)+".csv",FILE_CSV|FILE_WRITE|FILE_READ,";");
    if(h<1)
      {
      Print("Файл не найден : ", GetLastError());
      return(false);
      }
      string Wtime=TimeToStr(TimeCurrent(),TIME_DATE|TIME_MINUTES);
      string Wday=DoubleToStr(DayOfWeek(),0);
      FileSeek(h, 0, SEEK_END);
      FileWrite(h,Wtime,Wday,DoubleToStr(iClose("GBPUSD",0,0),MarketInfo(Symbol(),MODE_DIGITS)),
                             DoubleToStr(iOpen("GBPUSD",0,0),MarketInfo(Symbol(),MODE_DIGITS)),
                             DoubleToStr(iHigh("GBPUSD",0,0),MarketInfo(Symbol(),MODE_DIGITS)),
                             DoubleToStr(iLow("GBPUSD",0,0),MarketInfo(Symbol(),MODE_DIGITS)));
      FileClose(h);   
      Print("Close=",Close[0]);
      Print("Open=",Open[0]);
      Print("Low=",Low[0]);
      Print("High=",High[0]);
     
   return(0);
  }
理由: