[ARCHIVE]フォーラムを乱立させないために、どんなルーキーの質問でも。プロフェッショナルの皆さん、通り過ぎないでください。あなたなしではどこにも行けない - 5. - ページ 323

 

こうなるのです。

//+-------------------------------------------------------------------------------------+
//| Расчитываем количество идущих один за одним баров одного признака                   |
//+-------------------------------------------------------------------------------------+
int LastCandlesType(int directionMA)
{
   int cntUp,                                                                           // Счётчик идущих друг за другом свечей с..
       cntDn,                                                                           // .. требуемыми признаками
       t;                                                                               // Счётчик всех просчитанных баров
       
   for (int i=i_AnyBarsToHistory; i>=1; i--, t++)
   {
      if (directionMA == CROSS_UP)                                                      // Если машки направлены вверх
      {
         if ((Open[i] - Close[i]) >= i_sizeOfSequentialCorrectionBar * pt)              // Если бар соответствует требуемым признакам..
             cntDn++;                                                                   // .. прибавим 1 к счётчику
         if ((Close[i] - Open[i]) >= i_sizeOfTrandBar * pt)                             // Если бар, не соответствует основному признаку..
             cntDn = 0;                                                                 // .. счётчик обнуляем
                                                                                        
         if (i == 1)
            Print(" directionMA ", directionMA, "; i = ", i, "; Open[i] - Close[i] = ", Open[i] - Close[i], "; cntDn = ", cntDn);

         if (t == i_AnyBarsToHistory)
         {
             if (cntDn == i_sequentBarsСount)                                                // Если cnt баров в подряд медвежьи..
                 return (REQUIRED_SEQUENTIAL_BEARS_GOT);                                     // .. Выходим из функции
         }
      }

      if (directionMA == CROSS_DN)                                                      // Если машки направлены вниз
      {
         if ((Close[i] - Open[i]) >= i_sizeOfSequentialCorrectionBar * pt)              // Если бар соответствует требуемым признакам..
             cntUp++;                                                                   // .. прибавим 1 к счётчику
         if ((Open[i] - Close[i]) >= i_sizeOfTrandBar * pt)                             // Если бар, не соответствует основному признаку..
             cntUp = 0;                                                                 // .. счётчик обнуляем
         if (i == 1)
            Print(" directionMA ", directionMA, "; i = ", i, "; Close[i] - Open[i] = ", Close[i] - Open[i], "; cntUp = ", cntUp);

         if (t == i_AnyBarsToHistory)
         {
             if (cntUp == i_sequentBarsСount)                                                // Если cnt баров в подряд бычьи..
                 return (REQUIRED_SEQUENTIAL_BULLS_GOT);                                     // .. Выходим из функции
         }
      }
      return (REQUIRED_SEQUENTIAL_MISS);
   }
}

実際、1行も印刷されていない。

Print(" directionMA ", directionMA, "; i = ", i, "; Close[i] - Open[i] = ", Close[i] - Open[i], "; cntUp = ", cntUp);

ということは、上記には何らかのバグがあるのでしょう。

一番面白いのは、ここにデフォルトのリターンを追加したら、なぜかずっと動くようになったことです。文字列のことです。

return (REQUIRED_SEQUENTIAL_MISS);

コードが初歩的なもので、そこにエラーがあるはずがないことは明らかですが。

 

皆さん、こんにちは。達人の皆様、預金通貨で 利益が増減すると、なぜv_sが増えたり減ったりするのか、教えてください。

value_profit()は、入金通貨での利益計算です。

double value_stop,value_step;
value_stop=((AccountBalance()/100)*1)。
value_step=((AccountBalance()/100)*4)。
double v_s;
if (value_profit()>=(value_step+value_stop))。
for (int v=1;v<=100;v++)
{
if (value_profit()>=(value_step+(value_stop*v))
{
v_s=value_stop*v;
}
さもなくば
{
if (value_profit()<=v_s)
close_all()。
}
}
 
hoz:

実際、1行も印刷されていない。

1.なぜ、モジュール化を一度にきっちりやるのか?もちろん、人それぞれのスタイルがあると思いますが、私はまずコンパクト版に磨きをかけ、それがキチンと動くようになったら、モジュール化に移行します。前ページでstart()内部の変種としてコンパクト変種(挿入関数Trade, LastCandlesType, GetStateOfMA, GetGeneralSignalなし)を示しましたが、この変種をさらにコンパクトにしたものがstart()内部変種になります。どのような効果があるのでしょうか?うまくいったら、モジュールに分割してください。

2.tカウンターがiカウンターと絶対的に平行に変化するため、私にはこのコードは前のものと全く同じに見えます。iと比較できるのなら、なぜtと比較するのか?そして、さらに論理を進めると、では、うまくいかなかったコードがあるのに、なぜiと比較するのでしょうか?

3.お邪魔します、このバリエーションはループから出力を取り出すとどうなるのでしょうか?

int LastCandlesType(int directionMA){
        int cntUp, cntDn;
        for (int i=i_AnyBarsToHistory; i>=1; i--){
                if (directionMA == CROSS_UP){
                        if ((Open[i] - Close[i]) >= i_sizeOfSequentialCorrectionBar * pt) cntDn++; else cntDn=0;
                        if (i == 1) Print(" directionMA ", directionMA, "; i = ", i, "; Open[i] - Close[i] = ", Open[i] - Close[i], "; cntDn = ", cntDn);
                }
                if (directionMA == CROSS_DN){
                        if ((Close[i] - Open[i]) >= i_sizeOfSequentialCorrectionBar * pt) cntUp++; else cntUp=0;
                        if (i == 1) Print(" directionMA ", directionMA, "; i = ", i, "; Close[i] - Open[i] = ", Close[i] - Open[i], "; cntUp = ", cntUp);
                }
        }
        if ((directionMA==CROSS_UP)&&(cntUp>=i_sequentBarsСount)) return(REQUIRED_SEQUENTIAL_BEARS_GOT);
        if ((directionMA==CROSS_DN)&&(cntDn>=i_sequentBarsСount)) return(REQUIRED_SEQUENTIAL_BULLS_GOT);
        return(REQUIRED_SEQUENTIAL_MISS);
}

それもうまくいかないかもしれないことは理解しています、何でもいいのですが、さらにそれを解明するためには確信が必要です。

4.純粋に私個人の適応ですが、メタエディタではなく、行番号のついた他のエディタでコードを入力し、変数が変化するたびに、またifやswitchをチェックするたびに、同じ行(最後のセミコロンの後)にプリントします。行番号で印刷 - チェックする値(複数可)。if(tracing) {Print(StringConcatenate("line_number: variable_name=", variable_name));} の後にプリントし、ヘッダーで次のように変数を宣言する。 bool tracing=false;//enable tracing.この場合、本格的なトレース、つまり本格的なデバッグが可能になります。でも、当然ながらログの掃除はもっと頻繁にしなければなりません。メタ・エディタを直接使う場合は、まず、次のような空のテンプレートを作ります。

/*001*/

...

/*999*/

を行頭に置き(そしてうまくいく)、このテンプレートのコピーでコードを入力する。でも、これはあくまで私が思っていることで、実際にはそのように試したのですが、矛盾していました。

 
rajak:

皆さん、こんにちは。達人の皆様、入金通貨で利益が増減するとv_sが増減する理由を教えて下さい。

value_profit()は、入金通貨での利益計算です。

double value_stop,value_step;
value_stop=((AccountBalance()/100)*1)。
value_step=((AccountBalance()/100)*4)。
double v_s;
if (value_profit()>=(value_step+value_stop))。
for (int v=1;v<=100;v++)
{
if (value_profit()>=(value_step+(value_stop*v))
{
v_s=value_stop*v;
}
さもなくば
{
if (value_profit()<=v_s)
close_all()。
}
}
ざっと見たところ、すぐにカンマが反転しているバグが見つかりました。if 文の使い方を教える。
 
gyfto:

3.詮索して申し訳ないのですが、結局、出力をループから取り出すのはどうなんでしょうか?

int LastCandlesType(int directionMA){
        int cntUp, cntDn;
        for (int i=i_AnyBarsToHistory; i>=1; i--){
                if (directionMA == CROSS_UP){
                        if ((Open[i] - Close[i]) >= i_sizeOfSequentialCorrectionBar * pt) cntDn++; else cntDn=0;
                        if (i == 1) Print(" directionMA ", directionMA, "; i = ", i, "; Open[i] - Close[i] = ", Open[i] - Close[i], "; cntDn = ", cntDn);
                }
                if (directionMA == CROSS_DN){
                        if ((Close[i] - Open[i]) >= i_sizeOfSequentialCorrectionBar * pt) cntUp++; else cntUp=0;
                        if (i == 1) Print(" directionMA ", directionMA, "; i = ", i, "; Close[i] - Open[i] = ", Close[i] - Open[i], "; cntUp = ", cntUp);
                }
        }
        if ((directionMA==CROSS_UP)&&(cntUp>=i_sequentBarsСount)) return(REQUIRED_SEQUENTIAL_BEARS_GOT);
        if ((directionMA==CROSS_DN)&&(cntDn>=i_sequentBarsСount)) return(REQUIRED_SEQUENTIAL_BULLS_GOT);
        return(REQUIRED_SEQUENTIAL_MISS);
}

ふむ、うまくいきましたね。ビジュアルでいくつかの "スクリーン "を走らせ、この間隔ですべてがクリアになりました。なぜ前回うまくいかなかったのか、まだ理解できていません。今後、つまずかないようにするためにも有効です。
 
hoz:

うーん、効いてますね。


嬉しい)))

ホズ

なぜ前回うまくいかなかったのか、まだ解明できていません。今後、つまずかないようにするためにも有効です。

なぜなら、将来的には、Close[0]または他のアルゴリズムでウィンドウの境界が何であるかに到達する前のために終了しないようにします。Whileではありません。

 
gyfto:

1.なぜ一度にモジュール化するのか?もちろん、人それぞれのスタイルがあると思いますが、私はまずコンパクト版を磨き、それが問題なく動くようになったら、モジュール化に切り替えます。前ページでstart()内部の変種としてコンパクト変種(挿入関数Trade, LastCandlesType, GetStateOfMA, GetGeneralSignalなし)を示しましたが、この変種をさらにコンパクトにしたものがstart()内部変種です。どのような効果があるのでしょうか?うまくいったら、モジュールに分割してください。

実は、そういう書き方は慣れているんです。そして、エラーを探すのも簡単です。なぜなら、エラーが関数LastCandlesType()の中にあることがすぐにわかったからです。でも、あなたのやり方はうまくいったのですが、まだ理由はわかっていません。

gyfto:

2.tカウンターがiカウンターと絶対的に平行に変化するため、私にはこのコードは前のものと全く同じに見えます。iと比較できるのなら、なぜtと比較するのか?そして、さらに論理を進めると、では、うまくいかなかったコードがあるのに、なぜiと比較するのでしょうか?

書くのが遅すぎる、...モラルオーバーかな

gyfto:

それもうまくいかないかもしれないことは理解しています、何でもいいのですが、さらに解明するためには、うまくいくことを確認する必要があるのです。

効果あり!残るは、なぜそのコードがうまくいかなかったのか、ということです。まず目を引いたのは、カウンタが値i_seqqtBarstCounterに達したときに関数を終了していることです。しかし、再度、プリントしてみると、関数return(REQUIRED_SEQUENTIAL_MISS)からデフォルトで終了させると、カウンタ値はずっと1しか表示さ れない。

配置する前は全て正しく計算されていたのに、フクロウが正しく取引されない。まったく何もなかったんです。理論的には、デフォルト出力より上の条件がどれも動作しなかった場合、どの条件もトリガーしていないことになり、デフォルト出力を条件に入れても動作しないはずなのだが。逆に言えば、その条件が成立していれば、成立しているはずです。


gyfto:

4.メタエディタではなく、行番号のある他のエディタでコードを入力し、変数が変更されるたびに、またifやswitchがチェックされるたびに、同じ行(最後のセミコロンの後)に印刷します。行番号で印刷 - チェックする値(複数可)。if(tracing) {Print(StringConcatenate("line_number: variable_name=", variable_name));} の後にプリントし、ヘッダーで次のように変数を宣言する。 bool tracing=false;//enable tracing.この場合、本格的なトレース、つまり本格的なデバッグが可能になります。でも、当然ながらログの掃除はもっと頻繁にしなければなりません。メタ・エディタを直接使う場合は、まず、次のような空のテンプレートを作ります。

/*001*/

...

/*999*/

を行頭に置き(そしてうまくいく)、このテンプレートのコピーでコードを入力する。でも、これはあくまで私が思っていることで、実際にはそのように試したのですが、矛盾していました。


まあ、行数ではなくExpert Advisorのデータに基づいて印刷するのですが。なぜ行番号が必要なのですか?個人的には、本当に便利な瞬間があるので、コード解析に使って います。しかし、行番号に頼ってコードを書いたりデバッグしたりするのは、私にはナンセンスです。
 
hoz:

なぜそのコードがうまくいかなかったのかは、まだわからない。


自分で考えた方法です。フラップの交差を読み取るのです。より正確には、任意のタイミングでクロスした後の3本の強気または弱気のローソク足です。その条件が満たされたとき、私たちは市場に参入 するのです。しかし、言葉による説明から判断すると、この3つ以上のローソク足が並んで来るのは、窓の右側のボーダーに属するものです。あなたのコードによると、それらはウィンドウの真ん中を参照することができます。したがって、Expert Advisorは、条件(3本のローソク足)に達したときに市場に参入したことになりますが、最後のローソク足は最後の1本ではない可能性があります。
 
gyfto:

自分で考えた通りです。クマの交差点を読み取りました。正確には、任意のタイミングでクロスした後の3本の強気または弱気のローソク足です。その条件が満たされたとき、私たちは市場に参入するのです。しかし、言葉による説明から判断すると、この3つ以上のローソク足が並んで来るのは、窓の右側のボーダーに属するものです。あなたのコードによると、それらはウィンドウの真ん中を参照することができます。したがって、EAは条件(3本のローソク足)に達したときに市場に参入しますが、最後のローソク足が最後のローソク足でない場合もあります。


結論はこうだ。「構文を知ることは、論理を見ることでもある」。これはとても重要なことです。ただ、そこに論理的な間違いがありました。

簡単なことのようですが、何かにこだわってしまい、すぐには理解できませんでした。うっそー。そんなこともあるんだ...。:(

 

こんにちは。

少し話がずれますが、質問させてください。

TA形状のスライスをCSVファイルにしたものがどこかにないか、教えていただけないでしょうか。txtやxlsなど、プログラムで処理できる形式なら何でもいいんです。

様々なTAの記事、教科書にTAフィギュアの例がありますが、もちろん普通の写真としてです。どなたか、H1-H4の期間におけるある通貨ペアの歴史の断片として保存された、多かれ少なかれ大きなTAシンボルのセットをお持ちではないでしょうか?

ググってみたが、見つからなかった。もちろん、手作業で履歴を確認し、形状に印をつけ、この履歴の一部を.csvとしてエクスポートし、必要な回数だけ繰り返し、最後に形状ベースを収集することも可能です。しかし、もし誰かがすでにこれをやっていたら、時間を節約したいと思います。

よろしくお願いします :)