[警告は閉鎖されました!】フォーラムを乱雑にしないために、どんな初心者の質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしでは、どこにも行けない。 - ページ 749

 
artmedia70:
賢明なる開発者たちよ。スクリプトを呼べるのであれば、その中で伝票を請求したいところですが、それもできないようで、一度にたくさんのアドバイザーは必要ないので...。私たちには簡単な方法はないのです :)
 

紳士プログラマー諸君。どうかご協力をお願いします。

入力変数から

extern bool UseHourTrade = True;
extern int FromHourTrade = 0;
extern int ToHourTrade = 23;

int start(){
if (UseHourTrade){
if (!(Hour()>=FromHourTrade && Hour()<=ToHourTrade)){
Comment("トレードの時間はまだ来ていません!");
return(0);
}.
}

UseHourTrade2、FromHourTrade2、ToHourTrade2といった変数で、トレードを行うべき2つ目の時間帯を追加したい。

スタート機能に何を追加すればいいのか、教えてください。今までいろいろなことを試してきましたが、うまくいきません。

事前にお礼を申し上げたい。私にはどうすることもできません。

 
cyclik33:
extern bool UseHourTrade = True,
            UseHourTrade2 = True;
 extern int FromHourTrade = 0,
            FromHourTrade2 = 0,
            ToHourTrade = 23,
            FromHourTrade2 = 23;

int start(){
   if (UseHourTrade){
   if (!(Hour()>=FromHourTrade && Hour()<=ToHourTrade)) {
 Comment("Time for trade has not come else!");
 return(0);
 }
   if (UseHourTrade2){
   if (!(Hour()>=FromHourTrade && Hour()<=FromHourTrade2)) {
 Comment("Time for trade has not come else!");
 return(0);
 }
 }

そんなところでしょうか。

SZYコード挿入 ボタン「SRC」の使い勝手が悪い、見づらい。

 
Abzasc:

難問はこれだ。

コードの一番最後にあるインジケータは、オブジェクトを作成し、別のインジケータのフラグとして機能します。

オブジェクトを作成した後、インジケータを5秒間スリープさせ、その後オブジェクトを削除して60秒間スリープさせ、その後最後の再試行に入り、新しいティックで初めからやり直す必要があるのですが、どうすればよいでしょうか?

こんなことに挑戦しています

時間切れに なりそうなところまでハングアップする。

何かコツがあるのでしょうか?


ロジックは次のとおりです。両方のインジケータがオブジェクトの名前を知っていて、さらに1つのオブジェクト

最初のものは、オブジェクトを作成し、それがそこにある間は何もしません。

2番目は、オブジェクトを読み、その処理を行い、さらにオブジェクトを設定します。

最初のオブジェクトは、メインオブジェクトを見ることなく、何もせずに去り、すぐに2番目のオブジェクト(追加オブジェクト)を見つけ、オブジェクトの作成時間(作成時に2番目のコンポーネントによってそこに入力されています)を読み、必要な休止時間(60秒)をカウントダウンし、すべてのオブジェクトを削除します - あなたは作業を続けることができます....

 
Abzasc:
インジケータでは動作しません。このようなやり方をする理由がわからない。どうやら、常に動いているインジケーターは、催眠術のようなものなのでしょう :)

なぜなら、インジケータはインターフェイスの流れの中で動作しているので、スリープさせることはできません。もし、「スローダウン」させることができれば、その瞬間、ターミナルのどのボタン(例えば、「新規注文」、「注文を閉じる」など)も押すことはできないからです。
もうひとつ、この話題で微妙なのは、テスターのことです。実際のターミナルでは、複数のスレッドがあり、1つのインターフェーススレッドはExpert Advisors用に別々に作成されています(そのため、影響を受けることなく速度を落とすことができます)。
そのため、テストモード ではSleep()関数がこのような特殊な方法で動作するのです。テスターのフローをスリープさせると、Expert Advisorやインジケーター、ティック生成はもちろん、すべてが動かなくなる。そのため、もし私があなたの考えを正しく理解していれば、デモ上でのみテストが可能です。 もし、インターフェイスの流れを遅くしたい場合は、以下の関数を使用することができます。

//+------------------------------------------------------------------+
//| MySleep function                                                 |
//+------------------------------------------------------------------+
void MySleep(int sec){
   int pause = TimeSeconds(TimeLocal()) + sec;
   if(pause >= 60)pause = pause - 60;
   while(TimeSeconds(TimeLocal()) != pause){}
}
//+------------------------------------------------------------------+
 
xrust:


希望するポーズをカウントダウン(60秒)

試してみるのもいいですが、大事なのはいかにポーズを とるか...。これには困ったものだ。
 

よく読んでください、すべて説明しました、グラフオブジェクトを使う必要はまったくありません、グローバルでできます・・・。

 
ToLik_SRGV:

理由は、インジケータはインターフェイスの流れの中で動作するため、スリープさせることができないからです...。

ほらね...。ということです。


すごいな、ロックって。1つの指標に収まらない、寝かせられない...。グローバル変数 でやってみる。
 
xrust:

よく読んでください、すべて説明しました、グラフオブジェクトを使う必要はまったくありません、グローバルでできます・・・。

わかったような気がします。存在時間による削除もタイマーを使用します。でも、もう一回読み直します:)
 
Abzasc:

...グローバル変数で動作するようにしてみる。

Rustamのヒントは正しいと思います。スレッドフリーズは最後の手段で、極端な話、MQLだけでなく、すべてのプログラミング言語において言えることですからね。