週末の夕方 - ページ 9

 
Aleksey Panfilov:

1つの指標から3つの時間軸で6つのハンドルがあります。

そして、取るべき価値のオフセットが、すでに定められている。1つ1つの価値をコピーしていったのです。

1つのインジケータの3つのハンドルを3つのタイムフレームで使用し、そこから可能なシフト間隔をコピーすることで混乱したのです。

一度に複数のバーからインジケータ値を取得する必要がある場合、値を配列にコピーする必要があります。iATRを例にして。

//+------------------------------------------------------------------+
//| Get value of buffers for the iATR                                |
//+------------------------------------------------------------------+
double iATRGet(const int index)
  {
   double ATR[1];
//--- reset error code 
   ResetLastError();
//--- fill a part of the iATR array with values from the indicator buffer that has 0 index 
   if(CopyBuffer(handle_iATR,0,index,1,ATR)<0)
     {
      //--- if the copying fails, tell the error code 
      PrintFormat("Failed to copy data from the iATR indicator, error code %d",GetLastError());
      //--- quit with zero result - it means that the indicator is considered as not calculated 
      return(0.0);
     }
   return(ATR[0]);
  }
//+------------------------------------------------------------------+
//| Get value of buffers for the iATR in the array                   |
//+------------------------------------------------------------------+
bool iATRGetArray(const int start_pos,const int count,double &arr_buffer[])
  {
   bool result=true;
   if(!ArrayIsDynamic(arr_buffer))
     {
      Print("This a no dynamic array!");
      return(false);
     }
   ArrayFree(arr_buffer);
   int       buffer_num=0;          // indicator buffer number 
//--- reset error code 
   ResetLastError();
//--- fill a part of the iATRBuffer array with values from the indicator buffer that has 0 index 
   int copied=CopyBuffer(handle_iATR,buffer_num,start_pos,count,arr_buffer);
   if(copied!=count)
     {
      //--- if the copying fails, tell the error code 
      PrintFormat("Failed to copy data from the iATR indicator, error code %d",GetLastError());
      //--- quit with zero result - it means that the indicator is considered as not calculated 
      return(false);
     }
//---
   return(result);
  }
 
Vladimir Karputov:

一度に複数のバーからインジケータ値を受け取りたい場合、値を配列にコピーする必要があります。iATRを例にして。

そうですね、コピーした配列を動的なままにしていたのが間違いだったようです。:(

確認します。

 
Aleksey Panfilov:

そう、コピーした配列を動的なままにしておいたのが間違いだったようです。:(

確認します。

動的配列にしか コピーしない!また、コピーする前に、強制的にArrayFreeに する。静的配列に問題があった。それ以来、動的なものだけ。

 
Vladimir Karputov:

ダイナミックアレイにしか コピーしない!そして、コピーする前に、強制的にArrayFreeして います。静的配列の問題があった。それ以来、動的なものだけ。

了解です。エラーはここにない。

行かなかったExpert Advisorはこちらです。

ファイル:
 
Aleksey Panfilov:

了解です。間違いはここではない。

行かなかった専門家はこちらです。

ERROR:コピーしているのは1つの値ですか、それとも2つ ですか?

   //---  Используя функцию CopyBuffer, мы копируем по 1 последних новых значения индикаторов в динамические массивы

   if(CopyBuffer(Handle_4P72_L0_1,0,0,200,line1_L0)<0  // || CopyBuffer(Handle_4P72_L0_2,0,0,1,line2_L0)<0   || CopyBuffer(SMA_Handle_00,0,0,1,SMA_L0)<0
   || CopyBuffer(Handle_4P72_L1_1,0,0,200,line1_L1)<0  // || CopyBuffer(Handle_4P72_L1_2,0,0,1,line2_L1)<0   || CopyBuffer(SMA_Handle_01,0,0,1,SMA_L1)<0
   || CopyBuffer(Handle_4P72_L2_1,0,0,200,line1_L2)<0  // || CopyBuffer(Handle_4P72_L2_2,0,0,1,line2_L2)<0   || CopyBuffer(SMA_Handle_02,0,0,1,SMA_L2)<0
   ||  CopyTime(_Symbol,_Period,0,1,New_Time)<0)
 
Vladimir Karputov:

ERROR: コピーするのは1つの値ですか、それとも2つの 値ですか?

このEAでは(日付が違いますが)、3つのハンデと200の値を試しました。

 

もし、あなたがMT5用のロボットを作る準備ができているなら、私はあなたにアイデアを与えるために始めることができます。TS-Labで条件をシミュレートしていますが、MT5でオートモードで取引したいです。

テストに問題がなければ、取引ロジックを記載します。第一弾は、おそらくこれでしょう。

ファイル:
 
Vladimir Karputov:

まずは小分けにする。

現在のローソク足が閉じる前に「シグナルローソク足が閉じるまでの秒 数」があると同時に、「ローソク 足の平均サイズを計算するためのローソク足の 数」のローソク足の平均サイズを計算します。現在のローソク足が「現在のローソク足:超過体サイズ、 パーセント」で平均サイズを超えた場合 - ボリューム「ロット」でポジションを開き、「保留中の指値レベル:現在のローソクの高さのパーセント」の距離で始値からボリューム「ロット*「乗算係数」でシグナルローソクの高さのパーセント単位で指値を行います。

これでよいのでしょうか?


そこで作ったものを思い出すのに時間が必要です :)風通しが悪いので風邪を引きそうです。夏に熱を出して風邪を引くなんて、腹が立つと同時に笑えますね :)

 
Vladimir Karputov:

今まで何をしていたかを思い出すのに時間がかかる :)そして、まるでわざとかのように隙間風が吹き、結果的に風邪をひいてしまうのです。夏に熱を出したり、風邪をひいたりするのは、面白いし、腹も立ちますね :)

気分が良くなる。

 
Vladimir Karputov:

ダイナミックアレイにしか コピーしない!そして、コピーする前に、強制的にArrayFreeして います。静的配列の問題があった。それ以来、動的なものだけ。

おいおい...静止画のものも問題ないです。話の内容にもよりますが。バッファを管理したり、エラーをキャッチしたりする必要がないのであれば、動的なもののほうがよいでしょう。しかし、フクロウの場合、実は違いはないのです。