[ARCHIVE]フォーラムを乱立させないために、どんなルーキーの質問でも。プロフェッショナルの皆さん、通り過ぎないでください。あなたなしではどこにも行けない - 5. - ページ 279 1...272273274275276277278279280281282283284285286...432 新しいコメント Viktar Dzemikhau 2013.04.11 10:24 #2781 私の関数が同じ配列の要素の値を返すのは何か変です。この問題に関して、順を追って説明します。グローバル 変数はextern int i_TF = 0; int g_maPeriod[3] = {6, 25, 150, 250}, // Периоды обрабатываемых МА g_singMa[3] = {1,2,3,4}; // признаки машек, добавляемые к основному мэйджику // Идентификаторы сигналов #define SIGNAL_BUY 0 // Сигнал на покупку #define SIGNAL_SELL 1 // Сигнал на продажу #define SIGNAL_NO -1 // Сигнала нет #define CROSS_UP 0 // Признак нахождения быстрой средней // ..над медленной #define CROSS_DN 1 // Признак нахождения медленной.. // ..средней над быстрой #define CROSS_NO -1 // Признак равенства двух среднихint crossDir[3];この計算で使用される関数。//+-------------------------------------------------------------------------------------+ //| Получение значений МА на двух соседних барах | //+-------------------------------------------------------------------------------------+ double GetCurAndPrevMA(int maPeriod, double& prevMA) { prevMA = iMA(NULL, i_TF, maPeriod, 0, MODE_EMA, MODE_CLOSE, 1); return (iMA(NULL, i_TF, maPeriod, 0, MODE_EMA, MODE_CLOSE, 0)); } //+-------------------------------------------------------------------------------------+ //| Получение положения машек между собой | //+-------------------------------------------------------------------------------------+ void GetStateMa(int& crossDir[]) { double ema365_1; double ema365_0 = GetCurAndPrevMA(365, ema365_1); Print("g_maPeriod[0] = ", g_maPeriod[0]); Print("g_maPeriod[1] = ", g_maPeriod[1]); Print("g_maPeriod[2] = ", g_maPeriod[2]); Print("g_maPeriod[3] = ", g_maPeriod[3]); for (int i=0; i<4; i++) { double ema1; double ema0 = GetCurAndPrevMA(g_maPeriod[i], ema1); crossDir[i] = CROSS_NO; Print("ema1 < 365_1 ", ema1 ," < ", ema365_1); if (ema1 < ema365_1 && ema0 > ema365_0) { Print("ema1 < 365_1 ", ema1 ," < ", ema365_1); crossDir[i] = CROSS_UP; } if (ema1 > ema365_1 && ema0 < ema365_0) { Print("ema1 > 365_1 ", ema1 ," > ", ema365_1); crossDir[i] = CROSS_DN; } } }さらに、GetStateMa(int& crossDir[]) 関数が返す配列アイテムの値を表示しています。 Print("crossDir[0] = ", crossDir[0]); Print("crossDir[1] = ", crossDir[1]); Print("crossDir[2] = ", crossDir[2]); Print("crossDir[3] = ", crossDir[3]);これが返ってくるのです。2013.04.11 15:08:48 2009.01.25 23:46 Base150_New EURUSD,H1: crossDir[3] = 0 2013.04.11 15:08:48 2009.01.25 23:46 Base150_New EURUSD,H1: crossDir[2] = -1 2013.04.11 15:08:48 2009.01.25 23:46 Base150_New EURUSD,H1: crossDir[1] = -1 2013.04.11 15:08:48 2009.01.25 23:46 Base150_New EURUSD,H1: crossDir[0] = -1 2013.04.11 15:08:48 2009.01.25 23:46 Base150_New EURUSD,H1: open #1 buy 0.10 EURUSD at 1.29654 ok 2013.04.11 15:08:48 2009.01.25 23:46 Base150_New EURUSD,H1: ema1 < 365_1 1.3129 < 1.3225 2013.04.11 15:08:48 2009.01.25 23:46 Base150_New EURUSD,H1: ema1 < 365_1 1.3017 < 1.3225 2013.04.11 15:08:48 2009.01.25 23:46 Base150_New EURUSD,H1: ema1 < 365_1 1.2886 < 1.3225 2013.04.11 15:08:48 2009.01.25 23:46 Base150_New EURUSD,H1: ema1 < 365_1 1.2916 < 1.3225 2013.04.11 15:08:48 2009.01.25 23:46 Base150_New EURUSD,H1: g_maPeriod[3] = 250 2013.04.11 15:08:48 2009.01.25 23:46 Base150_New EURUSD,H1: g_maPeriod[2] = 150 2013.04.11 15:08:48 2009.01.25 23:46 Base150_New EURUSD,H1: g_maPeriod[1] = 25 2013.04.11 15:08:48 2009.01.25 23:46 Base150_New EURUSD,H1: g_maPeriod[0] = 6 配列要素crossDir[] の値はすべて値1 であるべきですが、異なる値が返されます。これは、マッハ4と365を比較したときの表記の崩れからわかります。値が正しく返されない理由を教えてください。 Boris 2013.04.11 10:55 #2782 Ekburg: というのも、送られてきたリンク先ではこのアレイについて特に触れられていなかったし、仕事中だったので左の欄は気にしていなかったからです。しかし、あなたが吐き出したものは、あなた以外誰も飲み込まないでしょう ;) ヒントからどのように学んだのでしょうか?積極的で探究心のある自習だけが実を結ぶのです噛み砕いたのに、的確なアドバイスに「吐き戻し」!?ベビーシッターに片付けを頼む!? 削除済み 2013.04.11 12:53 #2783 iCustomで インジケータAから インジケータBを 作成し、チャート上に 表示しています。 インジケータAの パラメータを変更すると、インジケータBが 自動的にリビルドされず、強制的に再コンパイルする必要があります。 なぜインジケータBは 自動的にリビルドされないのですか? 私の間違いが何であるかアドバイスをお願いします。 TarasBY 2013.04.11 13:04 #2784 MK07: 皆さんこんばんは インジケータAから インジケータBを ビルドしています(iCustomを通して )。 両方のインジケータがチャート上にあります。 インジケータAの パラメータを変更すると、インジケータBが 自動的にリビルドされず、強制的にリコンパイルする必要があります。 なぜインジケータBは 自動的にリビルドされないのですか? 私の間違いを教えてください。 インジケータAの 設定とはINDEPENDENTな特定の設定でインジケータAを(iCustom 経由で)呼び出すと、ターミナルが同時に2つの独立したインジケータAのコピーを計算することを意味します。 削除済み 2013.04.11 13:14 #2785 TarasBY:iCustomで インジケータAを 呼び出し、その設定はインジケータAの 設定には依存しません。 端末が指標Aの 2番目のバリエーションを計算するようにするには、どうしたらよいでしょうか。 TarasBY 2013.04.11 13:21 #2786 MK07: 端末で第二版の指標Aを 計算させるためにはどうしたらよいでしょうか。 課題をより具体的にする。 削除済み 2013.04.11 14:10 #2787 borilunad: プロンプトから学んだとすれば、どのように学んだのでしょうか?積極的で探究心のある自習だけが実を結ぶのです噛み砕いたのに、的確なアドバイスを吐き出している!?ベビーシッターに片付けを頼む!? エゴをほどほどに!私はそのアドバイスを跳ね返さず、受け止め、お礼を言いましたが、そのような受け取り方はしません!私は文明的な方法で尋ね、答えました。 Ivan Miheev 2013.04.11 14:40 #2788 こんにちは。Point 変数の 値を EA で使用する必要があります。しかし、それは0に等しい。 私が理解する限り、これは引用符の小数点以下が5桁であるためです。この値を決定する方法はありますか?ありがとうございます。 削除済み 2013.04.11 15:14 #2789 TarasBY: 課題を明確にしてください。指標A - 通常のAO(My_AO) - 写真の一番上のもの。AOインジケーター(My_AO)のインジケーターB-ヒストグラム(+1/-1)-図中の真ん中のもの。インジケータA (写真一番下)のパラメータを変更した場合、インジケータBは 再コンパイルしても変化しません。指標でどうなるかを説明するためだけに、2つのAO指標(My_AO)を同時に表示しましたが、実際の条件ではAO(My_AO)は1つであるべきです。最初のコードはインジケーターA です。2つ目のコード-インジケータB。//---- indicator settings #property indicator_separate_window #property indicator_buffers 3 #property indicator_color1 Black #property indicator_color2 Green #property indicator_color3 Red #property indicator_width2 2 #property indicator_width3 2 #property indicator_level1 0.0 //---- input parameters extern int FastPeriod =5; extern int LowPeriod =34; //---- indicator buffers double ExtBuffer0[]; double ExtBuffer1[]; double ExtBuffer2[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- drawing settings SetIndexStyle(0,DRAW_NONE); SetIndexStyle(1,DRAW_HISTOGRAM); SetIndexStyle(2,DRAW_HISTOGRAM); IndicatorDigits(Digits+1); SetIndexDrawBegin(0,34); SetIndexDrawBegin(1,34); SetIndexDrawBegin(2,34); //---- 3 indicator buffers mapping SetIndexBuffer(0,ExtBuffer0); SetIndexBuffer(1,ExtBuffer1); SetIndexBuffer(2,ExtBuffer2); //---- name for DataWindow and indicator subwindow label IndicatorShortName("My_AO"); SetIndexLabel(1,NULL); SetIndexLabel(2,NULL); //---- initialization done return(0); } //+------------------------------------------------------------------+ //| Awesome Oscillator | //+------------------------------------------------------------------+ int start() { int limit; int counted_bars=IndicatorCounted(); double prev,current; //---- last counted bar will be recounted if(counted_bars>0) counted_bars--; limit=Bars-counted_bars; //---- macd for(int i=0; i<limit; i++) ExtBuffer0[i]=iMA(NULL,0,FastPeriod,0,MODE_SMA,PRICE_MEDIAN,i)-iMA(NULL,0,LowPeriod,0,MODE_SMA,PRICE_MEDIAN,i); //---- dispatch values between 2 buffers bool up=true; for(i=limit-1; i>=0; i--) { current=ExtBuffer0[i]; prev=ExtBuffer0[i+1]; if(current>prev) up=true; if(current<prev) up=false; if(!up) { ExtBuffer2[i]=current; ExtBuffer1[i]=0.0; } else { ExtBuffer1[i]=current; ExtBuffer2[i]=0.0; } } //---- done return(0); }#property indicator_separate_window #property indicator_minimum -1.5 #property indicator_maximum 1.5 #property indicator_buffers 2 #property indicator_color1 Green #property indicator_color2 Red #property indicator_width1 2 #property indicator_width2 2 #property indicator_level1 0.0 //--- buffers double ExtMapBuffer1[]; double ExtMapBuffer2[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexStyle(0,DRAW_HISTOGRAM); SetIndexBuffer(0,ExtMapBuffer1); SetIndexStyle(1,DRAW_HISTOGRAM); SetIndexBuffer(1,ExtMapBuffer2); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { double UP,DN; int counted_bars=IndicatorCounted(), limit; if(counted_bars>0) counted_bars--; limit=Bars-counted_bars; //---- for(int i=0;i<limit;i++) { UP=iCustom(NULL,0,"My_AO",1,i+1); DN=iCustom(NULL,0,"My_AO",2,i+1); if(UP>0) {ExtMapBuffer1[i+1]=1; ExtMapBuffer2[i+1]=0; } if(UP<0) {ExtMapBuffer1[i+1]=-1; ExtMapBuffer2[i+1]=0; } if(DN>0) { ExtMapBuffer1[i+1]=0; ExtMapBuffer2[i+1]=1; } if(DN<0) { ExtMapBuffer1[i+1]=0; ExtMapBuffer2[i+1]=-1; } } //---- return(0); } //+------------------------------------------------------------------+ TarasBY 2013.04.11 16:19 #2790 MK07:インジケータA- 通常のAOインジケータ(My_AO)-上図。指標B- AO指標(My_AO)のヒストグラム(+1/-1)-図中の中央。インジケータA (図中下)のパラメータを変更した場合、リコンパイルしてもインジケータBは 変わりません。2つのAOインジケータ(My_AO)を同時に表示したのは、インジケータで何が起こるかを説明するためだけですが、現実にはAO(My_AO)は1つであるべきなのです。最初のコードはインジケーターA です。2つ目のコードは、インジケーターB です。 そして、この順番が普通なのです(これが端末の原理です)。 指標Aの パラメータを変更したい場合、指標間の情報交換を行います(ファイル、端末のグローバル変数、RAMでも可)。指標Aは 初期化時に初期化可能なパラメータを渡し、指標Bは 指標Aの 変更を定期的にチェックします。変更を検出したら、指標Bも 新しいパラメータで初期化します(強制init())。 1...272273274275276277278279280281282283284285286...432 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
私の関数が同じ配列の要素の値を返すのは何か変です。この問題に関して、順を追って説明します。
グローバル 変数は
int crossDir[3];
この計算で使用される関数。
さらに、GetStateMa(int& crossDir[]) 関数が返す配列アイテムの値を表示しています。
これが返ってくるのです。
配列要素crossDir[] の値はすべて値1 であるべきですが、異なる値が返されます。
これは、マッハ4と365を比較したときの表記の崩れからわかります。値が正しく返されない理由を教えてください。
というのも、送られてきたリンク先ではこのアレイについて特に触れられていなかったし、仕事中だったので左の欄は気にしていなかったからです。
しかし、あなたが吐き出したものは、あなた以外誰も飲み込まないでしょう ;)
ヒントからどのように学んだのでしょうか?積極的で探究心のある自習だけが実を結ぶのです噛み砕いたのに、的確なアドバイスに「吐き戻し」!?ベビーシッターに片付けを頼む!?
皆さんこんばんは インジケータAから インジケータBを ビルドしています(iCustomを通して )。 両方のインジケータがチャート上にあります。 インジケータAの パラメータを変更すると、インジケータBが 自動的にリビルドされず、強制的にリコンパイルする必要があります。 なぜインジケータBは 自動的にリビルドされないのですか? 私の間違いを教えてください。
iCustomで インジケータAを 呼び出し、その設定はインジケータAの 設定には依存しません。
端末が指標Aの 2番目のバリエーションを計算するようにするには、どうしたらよいでしょうか。
端末で第二版の指標Aを 計算させるためにはどうしたらよいでしょうか。
プロンプトから学んだとすれば、どのように学んだのでしょうか?積極的で探究心のある自習だけが実を結ぶのです噛み砕いたのに、的確なアドバイスを吐き出している!?ベビーシッターに片付けを頼む!?
エゴをほどほどに!私はそのアドバイスを跳ね返さず、受け止め、お礼を言いましたが、そのような受け取り方はしません!私は文明的な方法で尋ね、答えました。
こんにちは。
Point 変数の 値を EA で使用する必要があります。
しかし、それは0に等しい。
私が理解する限り、これは引用符の小数点以下が5桁であるためです。
この値を決定する方法はありますか?
ありがとうございます。
課題を明確にしてください。
指標A - 通常のAO(My_AO) - 写真の一番上のもの。
AOインジケーター(My_AO)のインジケーターB-ヒストグラム(+1/-1)-図中の真ん中のもの。
インジケータA (写真一番下)のパラメータを変更した場合、インジケータBは 再コンパイルしても変化しません。
指標でどうなるかを説明するためだけに、2つのAO指標(My_AO)を同時に表示しましたが、実際の条件ではAO(My_AO)は1つであるべきです。
最初のコードはインジケーターA です。
2つ目のコード-インジケータB。
インジケータA- 通常のAOインジケータ(My_AO)-上図。
指標B- AO指標(My_AO)のヒストグラム(+1/-1)-図中の中央。
インジケータA (図中下)のパラメータを変更した場合、リコンパイルしてもインジケータBは 変わりません。
2つのAOインジケータ(My_AO)を同時に表示したのは、インジケータで何が起こるかを説明するためだけですが、現実にはAO(My_AO)は1つであるべきなのです。
最初のコードはインジケーターA です。
2つ目のコードは、インジケーターB です。
そして、この順番が普通なのです(これが端末の原理です)。
指標Aの パラメータを変更したい場合、指標間の情報交換を行います(ファイル、端末のグローバル変数、RAMでも可)。指標Aは 初期化時に初期化可能なパラメータを渡し、指標Bは 指標Aの 変更を定期的にチェックします。変更を検出したら、指標Bも 新しいパラメータで初期化します(強制init())。