どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 601

 
AlexeyVik:
それは、私が試した方法とはちょっと違うかもしれませんね。
EAで再コンパイルして実行しただけです。コメント中のSysパラメータを変更すると、この値が変化します。

もう一度、あなたのバージョンに変えてみたのですが、まだうまくいきません......。EAの中に入っていて、EAとして見えている...。
 
peace1984:

もう一度、あなたのバージョンに変えてみたのですが、まだうまくいきません......。EAの中に入っていて、EAとして見える...


それとも私が勘違いしていたのでしょうか?

ファイル:
11_1_1.mq4  8 kb
 
AlexeyVik:


それとも何か誤解があったのでしょうか?



sys!=1だと「sys should not be 1」というメッセージが出るのはわかるのですが、ユーザーを0から変更すると1になるはずなので、「sys should be 1」と表示されるはずです。

あなたのEAのバージョンでは、テスト中に左上隅に sys=0と表示されますが、これはそうであってはならないことです...。

 
peace1984:

sys!=1 の場合、"sys should not be 1" というメッセージが表示され、ユーザーを 0 から変更すると 1 になって "sys should be 1" というメッセージが表示されると理解しています。

ここでは、新発売の様子をご紹介します。下から並べます。


エキスパートが搭載されています。

外部変数リスト: Sys = 0

初期化に成功しました。

次の3行をEAから印刷する。

初期化解除理由 5(入力パラメーターがユーザーにより変更 されたため)

外部変数リスト: Sys = 1

初期化通過

次の3行は、Expert Advisorからのプリントです。

非初期化の理由 1(プログラムがチャートから 削除されました。)


何を明確にしたいのか?何がダメなのか理解できない...。

ps: そのような記号に注意を払う必要はありません。オプション口座だからこそ、このようなシンボルネームがあるのです。

 
AlexeyVik:

そういう問題じゃないんです。誰もあなたの完全な秘密のコードを望んでいません。誤解のまま完全なテストコードを書けばいい。これはどうでしょう?

ハイライトされた行を消去したのはいつですか?テレパスは役に立たないし、ただの人間はなおさらだ...。

それから、この部分です。

どこのプログラマーが書いたのか知りませんが、まったくもって不十分です......。あなたのせいではありません。あなたは、他の多くの人と同じように、ただコードを取って、それを修正しようとしただけです...。

counted_bars変数が、前回のインジケーター呼び出し(1行目)から変化していないバーの数に等しい場合

if(counted_bars < 0)でどうして0以下になるのか、私には到底理解できませんが...。

他もナンセンスですが、分解するのが億劫で...。


全く同感です。なぜ思いつかなかったのですか?)

そんな惨めなインジケーターのコードとファイルを添付します。

グラフを投げる→端末が自然にハングアップ→10分放置(PCの性能にもよる。i5 3.1 Ghz)→MTを強制終了→「bug log.csv」の名前でログファイルを開く→IndicatorCounted()のバグを確認する、という流れです。

#property indicator_separate_window
#property indicator_buffers 1

double Buffer_1[];

bool busy=false;
int han;

int init()
{
   han=FileOpen("bug log.csv", FILE_CSV|FILE_WRITE);
   SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,1);       
   SetIndexBuffer(0,Buffer_1); 
   return(0);
}

int deinit()
{
   FileClose(han);
   return(0);
}

int start()
{
   //if(busy) return(0);
   int limit=3000;
   if(IndicatorCounted()>0) limit=1;
   
   for (int i=0; i<limit; i++)
   { 
      busy=true;
      FileWrite(han, TimeToStr(TimeCurrent(), TIME_MINUTES|TIME_SECONDS), DoubleToStr(i, 0), DoubleToStr(IndicatorCounted(), 0));
      FileFlush(han);
      
      for(int j=1; j<7000; j++)
        for(int k=1; k<7000; k++)
          double var=2*0.34*MathArccos(0.5)+1.33*MathArcsin(0.23)+1.53*MathArctan(0.11)+2.33*MathCos(0.23)+1.22*MathLog(12)+1.22;
      
      Buffer_1[i]=var;
   }
   
   busy=false;
   return(777);
}
ファイル:
bugqtest.mq4  2 kb
 

こんにちは、スクリプトの何が足りないか教えてください。もし、if(AccountProfit()>1)の条件が満たされた場合、すべてのオープンオーダーをクローズしますが、現在は、条件が満たされるまで一部のオーダーのみをクローズします。

f(AccountProfit()>1)の場合

{ for (i=OrdersTotal()-1;i>=0;i--){OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_BUY)
{ OrderClose(OrderTicket(),OrderLots(),Bid,10,Green); return(0);
} else { OrderClose(OrderTicket(),OrderLots(),Ask,10,Red); return(0);
}}}
 
Expert:


全く同感です。なぜ思いつかなかったのですか?)

ヲーイズミーインディケーター自体のコードとファイルを添付します。

グラフを投げると、もちろん端末はハングアップ、10分ほど放置(PCの速度による、i5 3.1 Ghz)、MTを強制終了、「bug log.csv」という名前でログファイルを開く、IndicatorCounted()のバグを観察する、など。

どうだろう。こんなファイルを記録したインジケータがあるんだけど。

ファイル:
test.zip  21 kb
 
AlexeyVik:

どうだろう。このインジケータにこんなファイルを書き込ませていました。




ご感想をお寄せいただき、誠にありがとうございました。

あなたのバージョンで試してみましたが、同じ結果でした((

なぜこのような現象が起こるのか、何か心当たりはありますか?
私だけではありません。私のより高性能な別のPCで試しましたが、同じ問題です。

ファイル:
bugflog.zip  122 kb
 
i999i:

こんにちは、スクリプトの何が足りないか教えてください。もし、if(AccountProfit()>1)の条件が満たされた場合、すべてのオープンオーダーをクローズしますが、現在は、条件が満たされるまで一部のオーダーのみをクローズします。

f(AccountProfit()>1)の場合

{ for (i=OrdersTotal()-1;i>=0;i--){ OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_BUY)
{ OrderClose(OrderTicket(),OrderLots(),Bid,10,Green); return(0);
} else { OrderClose(OrderTicket(),OrderLots(),Ask,10,Red); return(0);
}}}
return(0);は冗長でした、ありがとうございました。
 
Expert:


ご感想をお寄せいただき、誠にありがとうございました。

あなたのバージョンで試してみましたが、同じ結果でした((

なぜこのような現象が起こるのか、何か心当たりはありますか?
私だけじゃないんです。私のより高性能な別のPCで試しましたが、同じ問題です。

私があなたを理解できないのか、それともあなたが何かを理解していないのか......。.csvファイルに問題があるのでしょうか?最初のバーがカウントされるまで prev_calculated または IndicatorCounted() (旧バージョン) はゼロになり、これは正しいです。