(1) 指定時刻の設定値は、時分を integer で取得。
(2) 現在時刻は MqlDateTime構造体を使って取得。
https://www.mql5.com/ja/docs/constants/structures/mqldatetime
(3) if文で(1)と(2)の時分を比較し、同じなら乱数を取得。
(4) 乱数の取得には MathRand を使う。
https://www.mql5.com/ja/docs/math/mathrand
ただし、MathRand は0〜32,767の値を返すので、次のように2で除算した余りに1を加える。これで1または2が返される。
int rand_index = MathRand() % 2 + 1;
MathRand を使用するときは、最初の呼び出しの前に MathSrand を呼び出して擬似乱数発生器を初期状態に設定する必要があるので注意が必要。
- www.mql5.com
ちょっと、、、見様見真似で書いてみましたが、あと一歩、、、if文の判定の部分が
int select_hour = 10; //選択時刻 int OnInit() { MathSrand(GetTickCount()); return(INIT_SUCCEEDED); } void OnTick() { datetime tm = TimeCurrent(); MqlDateTime stm; TimeToStruct(tm, stm); if(select_hour == stm.hour) { int rand_index = MathRand() % 2 + 1; Print("今回の乱数は " + rand_index + " です。"); } }
とりあえず、if抜きでrand_indexとstm.hourってのをPrintしたら、なんか表示できてるかなっていう感じなんですが、if文の判定がうまくいっていないみたいです。
あと、今回のように10時になったらその時一回だけ乱数を表示するという形にしようと思うと追加どうなるでしょうか?
if(select_hour == StringToInterger(stm.hour)) { int rand_index = MathRand() % 2 + 1; Print(rand_index); }
とすると、なんとなくできたのかな?
しかしこれだと、10時の間ずっとやってしまうので、10時になった段階(9時のローソク足が終値確定、10時のローソク足の始値確定)のみ判定させたいんですが、どういう考え方になるでしょうか?
input int select_hour = 10; //選択時 input int select_minute = 0; //選択分 //--- datetime time_limit = 0; //制限時刻
if(select_hour == stm.hour && select_minute == stm.min && time_limit < tm) { int rand_index = MathRand() % 2 + 1; Print("今回の乱数は " + (string)rand_index + " です。"); time_limit = tm + 120; //120秒 }
この場合乱数発生時から120秒間動作が制限される。
ありがとうございました!
きちんと、思った時間に一回のみ作動するようになりました。
別でオーダーに関してはできるようになっていたので、その処理も入れてみて動いていました!
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
ランダムな整数は1or2の二つのみ。
1.指定の時刻Tickで動いている中、時刻が例えば日本時間16:00、MT的には10:00?の時だけイベント作動
2.ランダムな整数を表す1or2
この動きをさせたいのですが、どのような感じでコードを書けばいいでしょうか?
指定時刻に関してはinputで柔軟に変更できるようにしたいですが。hourだけじゃなくminutesまで