エラー、バグ、質問 - ページ 2531

 
Aleksey Vyazmikin:

あえてテストに参加することもなかったのが残念です。プロセッサによって処理するタスクが異なることが判明し、私としては興味深いテーマですが、まだ十分な統計が取れているわけではありません。

私のレアリティプロセッサーは、私の手元に残っているだけで、博物館に置いても、ほとんど誰の興味も引かないのです。

 
Aleksey Vyazmikin:

テストに参加する勇気もないとは、残念なことです。

初日にテストを実行するために望んでいたが、スレッドが数ページに成長している、テストコードの最初のバージョンでいくつかのバグ...さらに読んでいない、私自身の利益

分かりやすいマニュアル(写真付き)と、ユーザーのために何をするかという最低限の考え方があれば、ユーザーの活動が見えてくると思います。

 
Igor Makanu:

初日にテストを実行したかったのですが、スレッドが数ページに増え、最初のバージョンのテストコードにバグがあったりして、それ以上読む気になれず、自分の興味に走ってしまいました。

分かりやすいマニュアル(写真付き)と、ユーザーのために何をするかという最低限の考え方があれば、ユーザー活動が現れるかもしれないと思うのですが......。

そして、フォーラム自体は、このような何かのために非常に不快です。我々は、トピックの作成者がメッセージの質量の間で検索するのではなく、すべての必要な、関連する情報が配置されている任意の期間の終わりに最初の投稿を編集する機会を必要としています。この形式だとただのフラゲ用スレッドになっちゃいますね。

 

ここで質問です。

double[]型(通常の、指標)の配列へのポインタをプログラム内で参照できるように格納したい。

標準的な開発者は,この配列への参照を関数階層全体に渡して,絶対に不要な入力パラメータを乱雑にするか,あるいは,目盛りごとに 配列全体を自分自身にコピーし,その内部配列への参照を渡して記憶し,関数階層内で使用することを提案しています.

どちらのソリューションも、私にはとても醜く見えます。コールツリー全体を通して参照を渡すのは既に醜いですし、どの時点で配列にアクセスする必要があるか分からないことを考えると、本当に馬鹿馬鹿しくなってきます。

ソースがあるのに、ティックごとに配列を丸ごとコピーするのも、心もとないし、何より生産性が落ちる。

どなたかこの問題に遭遇した方はいらっしゃいますか?この制限を回避する方法は?

以前、確かfxsaber さんが何かのシャーマニズム的な作用を利用したアドレスコピー機能を提案していた記憶があるのですが、見つけられませんね。

誰が何を提案できるのか?

 
Vict:

私のレアリティプロセッサーは、私が持っているだけで、博物館にあっても、ほとんど誰の目にも留まりません。

進捗状況を評価するのは、いつも興味深いことです。


イゴール・マカヌ

初日にテストを実行したかったのですが、スレッドが数ページまで伸びており、最初のバージョンのテストコードにバグがあったり・・・それ以上は読まず、自分の興味に忙殺されてしまいました

分かりやすいマニュアル(写真付き)と、ユーザーのために何をすべきかを最低限考えることで、ユーザーの活動が見えてくるのではないでしょうか。

そこにバグはないはずで、他は問題なく動作しています。さて、ストラテジーテスターの 設定方法のスクリーンショットがあります。

オプティマイザーの設定が難しいとは全く思いませんでしたが...。今、そこで何がわからないか--ヒントをあげよう。


ビクト

また、フォーラム自体もこのようなものには非常に違和感があります。大量の投稿の中から検索するのではなく、必要な関連情報がすべてある、どの期間の終わりでも最初の投稿をトピックの作成者が編集する機能が必要です。この形式だとただのフラゲ用スレッドになっちゃいますね。

他のフォーラムは持っていません。情報があれば定期的に結果を更新しています。

 
Georgiy Merts:

ここで質問です。

double[]型(通常の、指標)の配列へのポインタをプログラム内で参照できるように格納したい。

標準的な開発者は,この配列への参照を関数階層全体に渡して,絶対に不要な入力パラメータを乱雑にするか,あるいは,目盛りごとに 配列全体を自分自身にコピーし,その内部配列への参照を渡して記憶し,関数階層内で使用することを提案しています.

どちらのソリューションも、私にはとても醜く見えます。コールツリー全体を通して参照を渡すのは既に醜いですし、どの時点で配列にアクセスする必要があるか分からないことを考えると、本当に馬鹿馬鹿しくなってきます。

ソースがあるのに、ティックごとに配列を丸ごとコピーするのも、心もとないし、何より生産性が落ちる。

どなたかこの問題に遭遇した方はいらっしゃいますか?この制限を回避する方法は?

以前、確かfxsaber さんが何かのシャーマニズム的な作用を利用したアドレスコピー機能を提案していた記憶があるのですが、見つけられませんね。

誰が何を提案できるのか?

mql5で言えば、インジケータをクラスでラップして、必要ならそれを引っ張ってきて、そのクラスで必要なデータを必要なngbinにコピーして保存し、毎ティックごとにその単一更新を制御する、というようなことが考えられます。私はこの方法でやっています。
 
Vladimir Simakov:
mql5の話であれば、代替案として、インジケータをクラス化し、必要であればそれを取得して、必要なデータを必要なngbinに格納・コピーして、tick毎に1回更新を制御するために使用します。私はこの方法でやっています。

私自身、普段からそうしているのですが...。

しかし、インジケーターバッファーではうまくいきません。それとも、私が何か見落としていて、何とかできるものなのでしょうか?

 
Georgiy Merts:

しかし、インジケーターバッファーでは、ラップが消えないのです。

いつもそうでした。
 
Georgiy Merts:

しかし、インジケーターバッファーでは、ラッピングが通らないのです。それとも何か見落としがあったのでしょうか、何とかなりませんか?

はすべて動作しますが、インジケータバッファと なる配列は public 修飾子を付けて記述する必要があります。

MQL4用のHMAインジケータを1つ作成しました。1つのサブウィンドウに4つのインジケータがあります。

CHMA *hma[4];
int OnInit()
  {
//--- indicator buffers mapping
   int i=0;
   hma[0] = new CHMA(4,PeriodInd1,Method1,Price1,Shift1);
   hma[1] = new CHMA(3,PeriodInd2,Method2,Price2,Shift2);
   hma[2] = new CHMA(2,PeriodInd3,Method3,Price3,Shift3);
   hma[3] = new CHMA(1,PeriodInd4,Method4,Price4,Shift4);

   IndicatorBuffers(16);
   IndicatorSetDouble(INDICATOR_MINIMUM,0.0);
   IndicatorSetDouble(INDICATOR_MAXIMUM,5.0);
   IndicatorSetInteger(INDICATOR_HEIGHT,IndHeight);
   while(i<8)       { SetIndexBuffer(i,hma[int(i/2)].Uptrend); SetIndexBuffer(i+1,hma[int(i/2)].Dntrend); i+=2; 			}
   for(i=0;i<4;i++) { SetIndexBuffer(i+8,hma[i].ExtMapBuffer); SetIndexBuffer(i+12,hma[i].vect); 					}
   for(i=0;i<8;i++) { SetIndexStyle(i,DRAW_ARROW,EMPTY,ArrowWidth, i%2==0 ? ArrowColor1 : ArrowColor2); SetIndexArrow(i,ArrowCode); 	}
   for(i=8;i<17;i++){ SetIndexStyle(i,DRAW_NONE);											}
   IndicatorShortName("");
   IndicatorDigits(0);
//---
   return(INIT_SUCCEEDED);
  }

と、古いインジケータの本体がコピーされただけのクラスそのものです。

class CHMA
  {
private:
   int               period_,shift_,p,level_;
   ENUM_APPLIED_PRICE price_;
   ENUM_MA_METHOD    method_;
   double            GetWMA(int x,int per){ return(iMA(NULL,0,per,0,method_,price_,x+shift_)); }
public:
   double            ExtMapBuffer[],vect[],Uptrend[],Dntrend[];
                     CHMA(int level,int period,ENUM_MA_METHOD method,ENUM_APPLIED_PRICE price,int shift);
   void              calcind(int lim,int prevcalculated);
   int               lastvalue();
  };

黄色は古いインジケータのバッファです。古いインジケータのコードを全く変更することなく、このクラスにコピーしただけなので、1時間弱かかりました。

 
TheXpert:
はいつもそうでした。

どういうことですか?クラスメンバを インジケータ配列として宣言することができる ?

今すぐ確認します。

うーん...。そうですね...

さて、それでは - すべてがもっとシンプルで、何の問題もなく解決します - クラスのメンバーをインジケータ配列として宣言し、まさにこのクラスへのポインタを渡して記憶させるのです。もちろん、この解決策はあまりいいものではありませんが、配列へのポインタがない場合には、これでOKです。