時間をdatetime変数として計算し、それをiBarshift()で使ってバー番号を取得し、バー番号がわかったらそれをOpen[]またはiOpen()で使用します。
時間をdatetime変数として計算し、それをiBarshift()で使用してバー番号を取得します。バー番号がわかったら、それをOpen[]またはiOpen()で使用します。
うん、悪くないアイデアだね:)
ありがとうございます、使ってみます
とが可能です。
int Bar; double OpenPrice; int B(k); { switch(HeureSH[k]) { case 0: Bar= iBarShift(Symbol(), PERIOD_H1, StrToTime("23:00")); break; case 1: Bar= iBarShift(Symbol(), PERIOD_H1, StrToTime("09:00")); break; case 1: Bar= iBarShift(Symbol(), PERIOD_H1, StrToTime("15:00")); break; case 3: Bar= iBarShift(Symbol(), PERIOD_H1, StrToTime("19:00")); break; } } OpenPrice= iOpen(Symbol(), PERIOD_H1, B);
HeureSHは4時間分の配列サイズです。
それは特定の時間であればバーが異なっていなければならないので、4つの異なる行ではなく、1行だけを持っているスイッチを作成するものの。
ああ、それは正しいですか?コードが正しく書かれている?
とが可能です。
HeureSHは4時間分の配列サイズです。
それは特定の時間であればバーが異なっていなければならないので、4つの異なる行ではなく、1行だけを持っているスイッチを作成するものの。
ああ、それは正しいですか?コードが正しく書かれている?
私はあなたが2回ケース1を持って いるとして、コピー/貼り付けエラーがあると仮定します... ...ので、私は2番目のケース1がケース2でなければならないと仮定します
HeureSH[]配列に格納される値は、1, 2, 3, 4 のいずれかですが、これは正しいですか? int 型の値のみです。. .
iOpen()の呼び出しでは、Bは Bar であるべきだと思いますが、それともB(int)であることを意味しますか? その呼び出しで関数を 使用したい場合は、関数が正しい値を返すようにしなければなりません。
もしあなたが意味のある変数名や関数名を使えば、あなた自身にとっても、他の人にとっても、大きな利点になるでしょう。
あ、これは私のミスです。自分のコードをコピーしたのですが、何を書いたのかわかりません.........。で、解決しました。
iopenでは、Bと書いていますが、これはBarのことです。
そうそう、文字列の値が問題になるんですよね、それが問題だと思うので、変えてみます。
int B(k); { switch(HeureSH[k]) { case 0: Bar= iBarShift(Symbol(), PERIOD_H1, StrToTime("23:00")); break; case 1: Bar= iBarShift(Symbol(), PERIOD_H1, StrToTime("09:00")); break; case 1: Bar= iBarShift(Symbol(), PERIOD_H1, StrToTime("15:00")); break; case 3: Bar= iBarShift(Symbol(), PERIOD_H1, StrToTime("19:00")); break; } } OpenPrice= iOpen(Symbol(), PERIOD_H1, B);これはうまくいきません。1) iBarShiftはBarに 割り当てられるが、iOpenはBを 使う。 2) StrToTime("23:00") は今日の23時の日付を返すが、これは常に未来(または現在のH1バー)である。
#define HR2400 86400 // 24 * 3600 datetime TimeOfDay(datetime when){ return( when % HR2400 ); } datetime DateOfDay(datetime when){ return( when - TimeOfDay(when) ); } int B(k); { #define HR0900 23400 // 9*3600 #define HR1500 54000 #define HR1900 68400 #define HR2300 59800 int times[]={ HR2300, HR0900, HR1500, HR1900 }; datetime now = TimeCurrent(), Bod = DateOfDay(now), want= Bod + times[HeureSH[k]]; if (want > now){ // Yesterdays? datetime prevTradingDate = iTime(Symbol(), PERIOD_D1, 1); want = prevTradingDate + times[HeureSH[k]]; } int iBar= iBarShift(Symbol(), PERIOD_H1, want); OpenPrice= iOpen(Symbol(), PERIOD_H1, iBar); }
こんにちは、WHRoederです。
あなたのコードは、私のコードよりも効率的で、時間値が昨日か今日かを取得することができると思います。私のコードでは、23:00は常に未来か現在で、遅すぎるということになりますね。
ありがとうございました。まさに私が探していたものです。
そうそう、言い忘れましたが、HeureSH[]は4つの異なる時間を文字列で表した配列サイズです。
OK、あなたのコードを私のEAに挿入し、それは完璧に動作します。私が望んでいたようにEAが実行されるのを見たとき、私は微笑んだ!
本当にありがとうございます。
市場が閉じているため、バックテスト 中です。
しかし、問題があります。
EAが正しくポジションを開くが、買いは決して閉じられず、開いたときに即座に閉じて販売する。
私のストラテジーは
同時に、EAは、パラメータが真であれば、売りまたは買いを開かなければならない。SLやTPはありません。
そして同時に、次の関数が真であれば、ループしてすべてのトレードをクローズしなければなりません。
if(OrdersTotal()>0) { for(int i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderMagicNumber() == MagicSH && OrderOpenTime() > iTime(Symbol(), PERIOD_H1, 1)) { if(OrderType() == OP_BUY) { OrderClose(OrderTicket(),LotsSH, bid, 300, CLR_NONE); } if(OrderType() == OP_SELL) { OrderClose(OrderTicket(),LotsSH, ask, 300, CLR_NONE);私は利益フィルタを追加する必要がありますが、私はこれについて作業します。それがなければ、買いをクローズしなければなりませんが、クローズされることはなく、売りを実行させなければなりませんが、売りはすぐにクローズされます。最後のコードに間違いがあるのでしょうか?
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
こんにちは、皆さん。
新しい質問があります。
例えば15:00になったとき、9:00のローソクの建値を 知りたいのです。
そこで、あらかじめ設定した時間帯のローソクの建値を取得するコードをどのように書けばよいのでしょうか?