Parabolic Sar インジケータをトレーニングツールとして使用する簡単なExpert Advisorを作成しようとしています。その動作は、価格がSarの値より下にあり、その後上昇した場合、価格が指標と交差した瞬間に正確に購入し、ストップロスと10ポイントの利益確定を設定することです。また、その逆であれば、売りです。
//+------------------------------------------------------------------+//| Current_sar_value_summary.mq4 |//| Орлов Денис Владимирович |//| orlovkem@mail.ru |//+------------------------------------------------------------------+#property copyright "Орлов Денис Владимирович"#property link "orlovkem@mail.ru"//+------------------------------------------------------------------+//| expert initialization function |//+------------------------------------------------------------------+int init(){//----//----return(0);}//+------------------------------------------------------------------+//| expert deinitialization function |//+------------------------------------------------------------------+int deinit(){//----//----return(0);}//+------------------------------------------------------------------+//| expert start function |//+------------------------------------------------------------------+int start(){//----//объявляем переменныеdouble _sar_value;//текущий уровень Сарdouble _price;//текущий уровень ценыint _ticket;//возвращает количество открытых позиций
_sar_value=iSAR(0,0,0.02,0.2,0);//приравнял переменную _sar_value к текущему значению индикатора Сар
_price=Bid;//приравнял переменную _price к текущему уровню цены Бид//описываем условие покупки: если уровень цены был ниже значения сарif(_price<_sar_value){if(_price>=_sar_value)// а потом стал выше, то покупаем{Alert("Надо покупать");
_ticket=OrderSend(Symbol(),OP_BUY,1,Ask,1,Bid-10*Point,Ask+10*Point,NULL,0,0,Red);Print("OrderSend failed with error #",GetLastError());return(0);}return(0);}if(_price>_sar_value)//описываем условие покупки: если уровень цены был выше значения сар{if(_price<=_sar_value)// а потом стал ниже, то продаем{Alert("Надо продавать");
_ticket=OrderSend(Symbol(),OP_SELL,1,Bid,1,Ask+10*Point,Bid-10*Point,NULL,0,0,Red);Print("OrderSend failed with error #",GetLastError());return(0);}return(0);}//----return(0);}//+------------------------------------------------------------------+
Parabolic Sar インジケータをトレーニングツールとして使用する簡単なExpert Advisorを作成しようとしています。その動作は、価格がSarの値より下にあり、その後上昇した場合、価格が指標と交差した瞬間に正確に購入し、ストップロスと10ポイントの利益確定を設定することです。また、その逆であれば、売りです。
フォーラムのスペシャリストの皆様、以前はほとんど何も理解していませんでした。
Parabolic Sar インジケータをトレーニングツールとして使用する簡単なExpert Advisorを作成しようとしています。その動作は、価格がSarの値より下にあり、その後上昇した場合、価格が指標と交差した瞬間に正確に購入し、ストップロスと10ポイントの利益確定を設定することです。また、その逆であれば、売りです。
問題は、常に売買を行うが、一度ではなく、預金に自由な資金がある間に行うことである。つまり、Sarの水準よりも価格が上がれば、高くなるまで買い続け、Sarの水準よりも価格が下がれば、低くなるまでずっと売り続けているのである。
実際、問題は、このような条件が現れたときに、EAが無限に続くのではなく、1つだけ取引をするようにするにはどうしたらいいかということです。
以下は、私のExpert Advisorのコードです。
それを解明するために協力をお願いしたいのです。私が教祖になったら、私のような人間の要望を無視しないことを約束します。
デニス・オルロフ、よろしく
フォーラムのスペシャリストの皆様、以前はほとんど何も理解していませんでした。
Parabolic Sar インジケータをトレーニングツールとして使用する簡単なExpert Advisorを作成しようとしています。その動作は、価格がSarの値より下にあり、その後上昇した場合、価格が指標と交差した瞬間に正確に購入し、ストップロスと10ポイントの利益確定を設定することです。また、その逆であれば、売りです。
問題は、常に売買を行うが、一度ではなく、預金に自由な資金がある間に行うことである。つまり、Sarの水準よりも価格が上がれば、高くなるまで買い続け、Sarの水準よりも価格が下がれば、低くなるまでずっと売り続けているのである。
実際、問題は、このような条件が現れたときに、EAが無限に続くのではなく、1つだけ取引をするようにするにはどうしたらいいかということです。
以下は、私のExpert Advisorのコードです。
私が第一人者になったら、私のようなド素人の要望を無視しないことを約束します。
敬具 デニス・オルロフ
インジケーターの予測値はどこに保存されているのですか?(どの変数で...?)価格値も同じです。
と、インジケーターの前の値はどこにあるのでしょうか?(どの変数に...?)価格値も同様です。
ポイントは、前回の指標値が前回のローソク足にあり、今回のローソク足で指標値と価格がクロスしていることです。
価格も同じで、「前の価格値」とは、前のティックの価格か、前のローソクの終値か、でもそれは違う。
何かを加えなければならないのはわかるのですが、具体的に何を加えればいいのかがわからないのです。初めての経験なのでよろしくお願いします。
>> 謹んで、オルロフ・デニス。
ポイントは、前回の指標値が前回のローソク足にあり、今回のローソク足で指標値と価格がクロスしていることです。
価格も同じで、「前の価格値」とは、前のティックの価格か、前のローソク足の終値か、ということですが、そうではありません。
何かを加えなければならないのはわかるのですが、具体的に何を加えればいいのかがわからないのです。初めての経験なので、助けてください。
敬具 オルロフ・デニス
じゃあ、自分の言ったことは理解できたのか?ある時点の値を確認することになります。
相互に排他的な2つの条件。その後、いつから背が高くなったのでしょうか?
じゃあ、自分の言ったことは理解できたのか?ある時点の値を確認するのです。
相互に排他的な2つの条件。いつから高くなったのですか?
コメントの配合を間違えたのかもしれませんが、本質はやはり、価格水準が指標値より高くなった、買わなければならない、買ってくれるが、一回やればいい、入金にお金がある限りEAが買ってくれる、ということだと思います。案件を限定すればいいんです。一度に1つ以上作らない、それがダメなんです。
しかし、履歴に売り注文があり、Expert Advisorがそれをクローズした場合(履歴タイプでは、それ(そのクローズ)はt/pまたはs/lと表示されます)、それは最後のものとみなされるのでしょうか。
注文(買いまたは売り)が最後に決済され(Expert Advisorが決済、またはt/pやs/lがトリガー)、以下の条件で通過した場合。
if(OrderSymbol()==Symbol()){
if(OrderMagicNumber()==MagicNumber){
注文(買いまたは売り)が最後に決済され(Expert Advisorが決済、またはt/pまたはs/lがトリガーされた)、条件を通過した場合。
if(OrderSymbol()==Symbol()){
if(OrderMagicNumber()==MagicNumber){
はい、おそらくOrderMagicNumber()をコードから除外したことが原因です
一度締め切った注文を再開するのは避けたい。注文を閉じた後、再開しないようにしたい(再開の条件が残っていることがある)。 売りの場合も同じで、買いポジションを持っていて利益がある場合、買いポジションを再開しないように条件に明記するのがクールだと思った)。
((
はい、それはおそらく、OrderMagicNumber()をコードから除外したためです
閉じた後に注文が再開されないようにしたいのですが。買いのポジションを持っていて、利益が出た場合、もう一度買いを再開しないように条件に指定すれば、クールだと思いました。 でも、まだ開いてしまうんですねー、この野郎!)))
((
同時に開く注文の数をコントロールする最も簡単な方法
OrderSend( ... ) の説明をお読みください。
注文がサーバーに送信される際に、マジックナンバー(magik)が割り当てられる。
これは主に、保留中の注文/ポジションを特定するために使用されます。
つまり、EAが「異質な」注文に触れないようにするためです。これは、EAやスクリプトによって行われます。
マジシャンは手動で設定することはできません。EA/スクリプトのルールは自分で設定する。
マジシャンは通常静的なものですが、必要であれば動的なものにもできます。
Kodobaseの簡単な例を見ていただければ、おわかりになると思います。
なぜ、チケット番号で「自分の」注文を特定できないのですか?Expert Advisorがいくつあっても、それらは一意である。
例えば、EAが注文を開き、チケットを記憶し、閉じて、忘れてしまう。
なぜ、チケット番号で「自分の」注文を識別できないのか?Expert Advisorがいくつあっても、それらは一意である。
例えば、あるEAが注文を出し、チケットを記憶し、その後クローズしたまま忘れてしまう。