[警告は閉鎖されました!】フォーラムを乱雑にしないために、どんな初心者の質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしでは、どこにも行けない。 - ページ 842 1...835836837838839840841842843844845846847848849...1145 新しいコメント Alexey Subbotin 2010.09.11 06:34 #8411 オープニングと同じブロックにオーダーモディフィケーションがあり、その条件がオーダーなしとなっていますね。注文を出したばかりで、すぐにそれを修正しようとすることがわかりますが、5pipsの利益はどこから出てくるのでしょうか? a11adin 2010.09.11 12:57 #8412 皆さん、こんにちは!最近、移動平均線に興味を持ちました。移動平均線と取引条件の組み合わせがいくつか見つかり、自分のTSが儲かっているかどうか、チェックし、何かあれば最適化することにしました。しかし、私のExpert Advisorは、テスト中にディールを開くことができませんでした。私は夜通しで解決策を考え、親愛なるプログラマーの皆さんにお願いすることにしました。EAがどのように動作するかを理解するために、私は簡単に私のTSを説明します:EMA(13)とEMA(55)のチャート上で、バーがEMA(13)を横切り、次のすべてのバーがEMA(13)の上/下にあった場合、MA(13)で価格に触れたときに我々は以前のバー(クロス後+少なくとも9と23以下)の方向に位置を開く。利食い60ポイント、ストップロス=EMA(55)+マイナス5ポイント。実はこれが戦略のすべてなんです。より分かりやすくするために、例を掲載しました。 そして、これがExpert Advisorのコードです。 //+------------------------------------------------------------------+ //| DWM.mq4 | //| Copyright © 2010, Bobkov Vasiliy | //| http://www.forex4you.ru | //+------------------------------------------------------------------+ #property copyright "Copyright © 2010, Bobkov Vasiliy" #property link "http://mql4.com" extern double Lot=0.1; extern int FastMA=13; //Быстрая МА extern int SlowMA=54; //МедленнаяМА extern int TP=60; //Тейк профит extern int MinBars=8; //Минимальное кол-во баров вне МА extern int MaxBars=25; //Максимальное кол-во баров вне МА extern int slippage=3; //Слипадж extern int Magic=347586; //Магическое число extern int Space=10; //Отступ от МА при тралле ордеров //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---- if (OrderCheck()==true) //Проверяем, есть ли ордер... { //...если ордер есть... Trall(); //Траллим return (0); } else //...если нет открытых позиций то... { double FMA=MA(0); double SMA=iMA(NULL,0,SlowMA,0,MODE_EMA,PRICE_CLOSE,0); for (int x=1;;x++) //Вычесляем сколько баров вне МА... { if (MA(x)<High[x]&& MA(x)>Low[x]) break; } if (Bid==FMA && x>MinBars && x<MaxBars) //Если условия выполняются, то... { if (FMA>SMA ) OrdOpen(0,SMA); //...открывем сделку на покупку if (FMA<SMA) OrdOpen(1,SMA); //...или на продажу } } //---- return(0); } //+------------------------------------------------------------------+ bool OrderCheck() //Функция проверки позиций { for(int i=1;i<=OrdersTotal();i++) { if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) return(true); } else Print("OrderSelect() вернул ошибку - ",GetLastError()); } return(false); } void OrdOpen(int type,double SO) //Функция открытия позиций { if (type==0) { if (OrderSend(Symbol(),0,Lot,Ask,slippage,SO-Space*Point,Ask+TP*Point,NULL,Magic,0,Blue)==true) return; else Print("OrderSend() вернул ошибку - ",GetLastError()); } else { if (OrderSend(Symbol(),0,Lot,Bid,slippage,SO+Space*Point,Bid-TP*Point,NULL,Magic,0,Blue)==true) return; else Print("OrderSend() вернул ошибку - ",GetLastError()); } return; } void Trall() //Трейллинг стоп { if (OrderSelect(Magic,SELECT_BY_TICKET)==true) { double SL=iMA(NULL,0,SlowMA,0,MODE_EMA,PRICE_CLOSE,0); if (Bid<iMA(NULL,0,SlowMA,0,MODE_EMA,PRICE_CLOSE,0)) SL=SL+Space*Point; else SL=SL-Space*Point; if (OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(SL,Digits),OrderTakeProfit(),0,Blue)==true) return; else Print("OrderModify() вернул ошибку - ",GetLastError()); } return; } double MA(int m) //Функция возвращающая значение МА { return(iMA(NULL,0,FastMA,m,MODE_EMA,PRICE_CLOSE,0)); } どなたかお手伝いいただける方がいらっしゃいましたら、お願いします。EA本体もお渡しします ファイル: dwm.mq4 5 kb Oleg 2010.09.11 19:52 #8413 ポジションを 開く、変える、閉じるなど、多くの機能を1つのフォーサイクルに集めることができます。 ここでは、簡単な例をご紹介します。 bool Ans=OrderModify(Ticket,Price,SL,TP,0); if (Ans==true) { Alert ("Ордер ",Text,Ticket," модифицирован:)"); break; // Из цикла модифи. } - 質問:ここでは「return」ではなく「break」を使うのが正しいのでしょうか?違いはあるのでしょうか? Andrey F. Zelinsky 2010.09.11 19:56 #8414 chief2000: ポジションを開く、変える、閉じるなど、多くの機能を1つのフォーサイクルに集めることができます。 ここでは、簡単な例をご紹介します。 - 質問:ここでは「return」ではなく「break」を使うのが正しいのでしょうか?違いはあるのでしょうか? https://docs.mql4.com/ru/basis/operators/break より。 "break 文は、最も近いネストの外部switch文、while文、for文の実行を停止します。制御は、終了したものに続くオペレータに与えられる。" https://docs.mql4.com/ru/basis/operators/return より。 "return 文は、現在の関数を終了させ、呼び出し元のプログラムに制御を戻す。" 答え:ここでは "break "を使うのが正しいです。 Oleg 2010.09.11 20:12 #8415 abolk: https://docs.mql4.com/ru/basis/operators/break より。 "break 演算子は、最も近いネストの外部スイッチ、whileまたはfor演算子の実行を終了させます。制御は終了したものに続くオペレータに移る。" https://docs.mql4.com/ru/basis/operators/return より。 "return 演算子は、現在の関数を終了させ、呼び出し元のプログラムに制御を戻す。" 答え:ここでは "break "を使うのが正しいです。 実は自分もbreakを使っているのですが、returnは刻み替えの意味だと思っていました(breakはそうではない)。 実際には、オーダーが変わるまでは、ティックの変化があるので、テスターが正しくシミュレーションをするためには の場合、returnを使用する必要があります。そうだろ? 私の勘違いかもしれませんが、理解したいと思います。 Andrey F. Zelinsky 2010.09.11 20:26 #8416 chief2000: 実は自分もbreakを使っているのですが、returnは刻みの変更という意味 だと思っていました(breakはそうではありませんが)。 実際にはオーダーが変わるまではティックチェンジが発生するため、テスターはリターンで正しくシミュレートする必要があります の場合、returnを使用する必要があります。そうだろ? 私の勘違いかもしれませんが、理解したいのです。 ドキュメントで読んでみよう。"return 演算子は、現在の関数の 実行を停止し、呼び出し元のプログラムに制御を戻す。" 現在のstart()関数の 場合、もう一度ドキュメントを読んでください。 https://docs.mql4.com/ru/runtime/start "新しい相場が来ると、付属のExpert Advisorやカスタムインジケータの関数start()が実行されます。新しい気配値の到着時に、前の気配値で実行されていた関数 start() が実行された場合、入力された気配値は Expert Advisor によって無視されます。プログラム実行中に来た新しい引用符は、次のstart()関数の実行が終了するまで、すべて無視されます。その後、関数 start() は、次の新しい相場が到着した後にのみ起動されます。 Oleg 2010.09.11 20:42 #8417 abolk: ドキュメントで読む。"return 文は、現在の関数を 終了させ、呼び出し元のプログラムに制御を戻す。" 現在の関数がstart() であれば、もう一度ドキュメントを読んでみてください。 https://docs.mql4.com/ru/runtime/start "新しい相場が来ると、付属のExpert Advisorとカスタムインジケータに対して関数start()が実行されます。新しい気配値の到着時に、前の気配値で実行されていた関数 start() が実行された場合、入力された気配値は Expert Advisor によって無視されます。プログラム実行中に来た新しい引用符は、次のstart()関数の実行が終了するまで、すべて無視されます。その後、関数 start() は、次の新しい相場が到着した後にのみ起動されます。 自分の言葉で表現してほしい。意味がわからないんですけど。 テスターでは、forがbreakで終了し、その後に他の関数が続くと、同じtickで実行されます。しかし実際には、この間(注文の変更中)に数ティックが変更されることがあります。だから、リターンの方が現実的だと思うんです。そうでしょう? Andrey F. Zelinsky 2010.09.11 20:51 #8418 chief2000: 自分の言葉で表現してほしかった。意味がわからないんですけど。 forがbreakで終了し、その後に他の関数が続く場合、同じtickで実行されます。しかし実際には、この間(注文の変更中)に数ティックが変更されることがあります。だから、リターンの方が現実的だと思うんです。そうでしょう? start()はtickの先頭から始まり、次のtickの先頭までに終了しない場合があります。 breakはforを終了させ、returnは関数を終了させる。forの後に演算子がない場合、このアルゴリズムではforとreturnを使うことに違いはない。 しかし、それぞれのオペレーターには目的があります。そして、意図しないオペレーターの使用は、弾の入っていない散弾銃のようなものです。 繰り返しになりますが、forループのアルゴリズムにおいて、何らかの理由で関数の実行を継続する必要がない場合、returnを使用することができます。 つまり、アルゴリズムがループの途中でブレークを必要とする場合、ループの後で関数がまだ終了していても、ブレークが使用されるのである。 Oleg 2010.09.11 21:36 #8419 abolk: start() は tick の先頭で処理を開始し、次の tick の先頭までに処理が終わらない場合があります。 break は for を完了し、return は関数を完了する。forの後に演算子がない場合、このアルゴリズムではforを使ってもreturnを使っても差はない。 しかし、それぞれのオペレーターには目的があります。そして、意図しないオペレーターの使用は、弾の入っていない散弾銃のようなものです。 繰り返しになりますが、forループのアルゴリズムにおいて、何らかの理由で関数の実行を継続する必要がない場合、returnを使用することができます。 つまり、アルゴリズムがループを抜けることを要求している場合は、たとえループの後に関数が終了したとしても、breakを入れるのです。 ふと思ったのですが、これらはすべてテスターのみを対象としたものなので、(必要に応じて)次のようにすればいいのではないでしょうか。 if(IsTesting()==true || IsOptimization()==true) { return; } break; ありがとうございました。 Andrey F. Zelinsky 2010.09.11 21:38 #8420 chief2000: アイデアが浮かびました。これはテスターのために始めただけなので、(適切なところでは)次のようにすることができます。 ありがとうございました。 よろしい 1...835836837838839840841842843844845846847848849...1145 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
皆さん、こんにちは!最近、移動平均線に興味を持ちました。移動平均線と取引条件の組み合わせがいくつか見つかり、自分のTSが儲かっているかどうか、チェックし、何かあれば最適化することにしました。しかし、私のExpert Advisorは、テスト中にディールを開くことができませんでした。私は夜通しで解決策を考え、親愛なるプログラマーの皆さんにお願いすることにしました。EAがどのように動作するかを理解するために、私は簡単に私のTSを説明します:EMA(13)とEMA(55)のチャート上で、バーがEMA(13)を横切り、次のすべてのバーがEMA(13)の上/下にあった場合、MA(13)で価格に触れたときに我々は以前のバー(クロス後+少なくとも9と23以下)の方向に位置を開く。利食い60ポイント、ストップロス=EMA(55)+マイナス5ポイント。実はこれが戦略のすべてなんです。より分かりやすくするために、例を掲載しました。
そして、これがExpert Advisorのコードです。
どなたかお手伝いいただける方がいらっしゃいましたら、お願いします。EA本体もお渡しします
ポジションを 開く、変える、閉じるなど、多くの機能を1つのフォーサイクルに集めることができます。
ここでは、簡単な例をご紹介します。
- 質問:ここでは「return」ではなく「break」を使うのが正しいのでしょうか?違いはあるのでしょうか?
ポジションを開く、変える、閉じるなど、多くの機能を1つのフォーサイクルに集めることができます。
ここでは、簡単な例をご紹介します。
- 質問:ここでは「return」ではなく「break」を使うのが正しいのでしょうか?違いはあるのでしょうか?
https://docs.mql4.com/ru/basis/operators/break より。
"break 文は、最も近いネストの外部switch文、while文、for文の実行を停止します。制御は、終了したものに続くオペレータに与えられる。"
https://docs.mql4.com/ru/basis/operators/return より。
"return 文は、現在の関数を終了させ、呼び出し元のプログラムに制御を戻す。"
答え:ここでは "break "を使うのが正しいです。
https://docs.mql4.com/ru/basis/operators/break より。
"break 演算子は、最も近いネストの外部スイッチ、whileまたはfor演算子の実行を終了させます。制御は終了したものに続くオペレータに移る。"
https://docs.mql4.com/ru/basis/operators/return より。
"return 演算子は、現在の関数を終了させ、呼び出し元のプログラムに制御を戻す。"
答え:ここでは "break "を使うのが正しいです。
実は自分もbreakを使っているのですが、returnは刻み替えの意味だと思っていました(breakはそうではない)。
実際には、オーダーが変わるまでは、ティックの変化があるので、テスターが正しくシミュレーションをするためには
の場合、returnを使用する必要があります。そうだろ?
私の勘違いかもしれませんが、理解したいと思います。
実は自分もbreakを使っているのですが、returnは刻みの変更という意味 だと思っていました(breakはそうではありませんが)。
実際にはオーダーが変わるまではティックチェンジが発生するため、テスターはリターンで正しくシミュレートする必要があります
の場合、returnを使用する必要があります。そうだろ?
私の勘違いかもしれませんが、理解したいのです。
ドキュメントで読んでみよう。"return 演算子は、現在の関数の 実行を停止し、呼び出し元のプログラムに制御を戻す。"
現在のstart()関数の 場合、もう一度ドキュメントを読んでください。
https://docs.mql4.com/ru/runtime/start
"新しい相場が来ると、付属のExpert Advisorやカスタムインジケータの関数start()が実行されます。新しい気配値の到着時に、前の気配値で実行されていた関数 start() が実行された場合、入力された気配値は Expert Advisor によって無視されます。プログラム実行中に来た新しい引用符は、次のstart()関数の実行が終了するまで、すべて無視されます。その後、関数 start() は、次の新しい相場が到着した後にのみ起動されます。
ドキュメントで読む。"return 文は、現在の関数を 終了させ、呼び出し元のプログラムに制御を戻す。"
現在の関数がstart() であれば、もう一度ドキュメントを読んでみてください。
https://docs.mql4.com/ru/runtime/start
"新しい相場が来ると、付属のExpert Advisorとカスタムインジケータに対して関数start()が実行されます。新しい気配値の到着時に、前の気配値で実行されていた関数 start() が実行された場合、入力された気配値は Expert Advisor によって無視されます。プログラム実行中に来た新しい引用符は、次のstart()関数の実行が終了するまで、すべて無視されます。その後、関数 start() は、次の新しい相場が到着した後にのみ起動されます。
自分の言葉で表現してほしい。意味がわからないんですけど。
テスターでは、forがbreakで終了し、その後に他の関数が続くと、同じtickで実行されます。しかし実際には、この間(注文の変更中)に数ティックが変更されることがあります。だから、リターンの方が現実的だと思うんです。そうでしょう?
自分の言葉で表現してほしかった。意味がわからないんですけど。
forがbreakで終了し、その後に他の関数が続く場合、同じtickで実行されます。しかし実際には、この間(注文の変更中)に数ティックが変更されることがあります。だから、リターンの方が現実的だと思うんです。そうでしょう?
start()はtickの先頭から始まり、次のtickの先頭までに終了しない場合があります。
breakはforを終了させ、returnは関数を終了させる。forの後に演算子がない場合、このアルゴリズムではforとreturnを使うことに違いはない。
しかし、それぞれのオペレーターには目的があります。そして、意図しないオペレーターの使用は、弾の入っていない散弾銃のようなものです。
繰り返しになりますが、forループのアルゴリズムにおいて、何らかの理由で関数の実行を継続する必要がない場合、returnを使用することができます。
つまり、アルゴリズムがループの途中でブレークを必要とする場合、ループの後で関数がまだ終了していても、ブレークが使用されるのである。
start() は tick の先頭で処理を開始し、次の tick の先頭までに処理が終わらない場合があります。
break は for を完了し、return は関数を完了する。forの後に演算子がない場合、このアルゴリズムではforを使ってもreturnを使っても差はない。
しかし、それぞれのオペレーターには目的があります。そして、意図しないオペレーターの使用は、弾の入っていない散弾銃のようなものです。
繰り返しになりますが、forループのアルゴリズムにおいて、何らかの理由で関数の実行を継続する必要がない場合、returnを使用することができます。
つまり、アルゴリズムがループを抜けることを要求している場合は、たとえループの後に関数が終了したとしても、breakを入れるのです。
ふと思ったのですが、これらはすべてテスターのみを対象としたものなので、(必要に応じて)次のようにすればいいのではないでしょうか。
ありがとうございました。
アイデアが浮かびました。これはテスターのために始めただけなので、(適切なところでは)次のようにすることができます。
ありがとうございました。
よろしい