MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 218 1...211212213214215216217218219220221222223224225...1953 新しいコメント Valerius 2017.05.27 06:46 #2171 a196012a:ボリューム0.1の注文を出すブロック(void start()関数の直後)を使って、あなたのコードを完成させました。しかし、なぜかプログラムは、これらの注文の閉鎖に応じて増加した量(各0.3ロット)の任意の順序を開くことはありません。あなたのコードで私が理解できないこと1.私の理解が正しければ、МН=123は0.3ロットの出来高の注文にのみ割り当てられていますね。datetime関数SearTim (int s)で、MH=123で出来高が0.1の注文を探していますね。しかし、出来高0.1の注文はМН=123とすることはできません。なぜなら、このMMは出来高0.1の注文にのみ割り当てられるからですdatetime SearTim(int s) と int sear() 関数の本体、特にコメントでは、出来高0.3の注文を出すのに必要ななぜ、同じ条件でより大きな数量の注文を何度も出さなければならないのか理解できない。すでに1ブロック目で出来高を増やした注文を開いていますね。 0.1の注文をそれぞれ決済した後、0.3の出来高の注文をオープンし、0.1の値を維持するようなコードを書いていただけるとありがたいのですが、いかがでしょうか?この場合、Print()関数と 私のささやかな知識、参考書の助けを借りて、あなたのコードから私の疑問に対するすべての答えを見つけるためにベストを尽くします。注0.1巻と0.3巻の同じタイプの注文があるのですが、SELだけです。そのため、私の勘違いでなければ、int sear()関数で注文の種類(BAYかSELか)を計算する必要はないのです。私のプログラムの最終目標は、0.1注文がSLで決済された0.3注文によってその終値で決済された後のオープニングの時間値(分でも秒でもなく時間だけ)を記憶することであることを、もう一度思い出していただきたい。 プログラミング言語を知っていることが前提なので、あまり説明できないのが申し訳ないのですが。もうプログラマーだと思うので、プログラミングを知っている人を頼っていたんです。まずプログラミングを学ばなければならない。何をどのようにと説明すると、それはプログラミング言語の習得になります。EAの例、書き方を見て、一からプログラムを書いてみる。しかも、すでに複雑になっているプログラムを書こうとしているわけですから。チュートリアルやコマンドの書き方の例、サンプルモジュールを見てください。 ファイル: MQL4.zip 2226 kb Vyacheslav Kornev 2017.05.29 03:40 #2172 この素朴な疑問を解決する、クロージングブロックをご紹介します。注文の利益がプラスになると、その注文を決済し、その利益全体で、どれだけの負けポジションが可能かを判断します。Perekrが有効な場合。儲かるポジションの利益が負けるポジションの損失をすべてカバーしたときのみ、つまり一方の注文の利益が他方の注文の損失と同じかそれ以上になったときに、両方のポジションを閉じるように変更する必要があるのです。if(Mas_Tip[1]>0) { if(Bidt-step*Point>=NormalizeDouble(Bid,Digits)) { Profit=AccountBalance()-StartProfit; Askt=NormalizeDouble(Ask,Digits); Bidt=NormalizeDouble(Bid,Digits); for(int i=1; i<=OrdersTotal(); i++) { if(OrderSelect(i-1,SELECT_BY_POS)==true && OrderType()==OP_SELL && OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) { if(Razn<2) { if(Perekr && OrderProfit()>0 && max_lot>=Lots_per) //перекрытие { double profit=OrderProfit(); Print("закрываю по перекрытию"); ClosePosBySelect(OrderLots()); for(int f=OrdersTotal()-1;f>=0;f--) { if(OrderSelect(f,SELECT_BY_POS)==true && OrderType()==OP_BUY && OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) { if(OrderProfit()<0) { if(profit>=MathAbs(OrderProfit())) { Print("закрываю по перекрытию"); ClosePosBySelect(OrderLots()); } Any questions from newcomers [アーカイブ!】どんなエキスパートやインジケーターでも無料で書きます。 どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - ev85 2017.05.29 04:58 #2173 友よ、こんにちは。初心者に教えてほしいのですがある指標と価格のクロスオーバーをメールで通知してほしいのですが。やり方は理解できたのですが、クロスした途端に何百通ものメールが届き、今のローソクが閉まるまで無限に送り続けられるのです。メッセージを1つだけ送信するにはどうしたらよいですか?以下はその一例です。if((iSAR(NULL, 0,Step,Maximum, 1)<iClose(NULL,0,1))&(iSAR(NULL, 0,Step,Maximum, 2)>iClose(NULL,0,2))) ){ (iSAR(NULL, 0,Step,Maximum, 2))&(iSAR(NULL,0,1))> iClose(NULL,0,2)))bool res = SendMail("Buy Signal", "Buy Signal");}if((iSAR(NULL, 0,Step,Maximum, 1)>iClose(NULL,0,1))&(iSAR(NULL, 0,Step,Maximum, 2)<iClose(NULL,0,2)))) { { (iSAR(NULL, 0,Step,Maximum, 2))&iClose(NULL,0,2))SendMail("売りシグナル", "売りシグナル");} Alexey Viktorov 2017.05.29 06:09 #2174 ev85:友よ、こんにちは。初心者に教えてほしいのですがある指標と価格のクロスオーバーをメールで通知してほしいのですが。やり方は理解できたのですが、プライスクロスが起きるとすぐに何百通ものメールが届き、現在のローソク足が閉じるまで無限に送り続けられるのです。メッセージを1つだけ送信するにはどうしたらよいですか?以下はその一例です。if((iSAR(NULL, 0,Step,Maximum, 1)<iClose(NULL,0,1))&(iSAR(NULL, 0,Step,Maximum, 2)>iClose(NULL,0,2))) ){。bool res = SendMail("Buy Signal", "Buy Signal");}if((iSAR(NULL, 0,Step,Maximum, 1)>iClose(NULL,0,1))&(iSAR(NULL, 0,Step,Maximum, 2)<iClose(NULL,0,2)))) { { (iSAR(NULL, 0,Step,Maximum, 2))&(iSAR(NULL,0,1))>iClose(NULL,0,2))SendMail("売りシグナル", "売りシグナル");}パラボリックの場合は、条件にフラグを入れるだけなので簡単です。あるいは、int型の 単純な変数で、信号ごとに値が変化するもの。static bool flag; if(flag && iSAR(NULL, 0,Step,Maximum, 1) < iClose(NULL,0,1) && iSAR(NULL, 0,Step,Maximum, 2) > iClose(NULL,0,2)){ bool res = SendMail("Сигнал на покупку", "Сигнал на покупку"); flag = false; } if(!flag && iSAR(NULL, 0,Step,Maximum, 1) > iClose(NULL,0,1) && iSAR(NULL, 0,Step,Maximum, 2) < iClose(NULL,0,2)){ SendMail("Сигнал на продаж", "Сигнал на продажу"); flag = true; } AlGuru 2017.05.29 07:02 #2175 皆さんこんにちは、Trailing Stopについて教えてください。トレーリングストップは、最初はSL=100で、ポジションが30pips上にあるときに発動させるという条件で書きました。しかし、ポジションを開いた直後に修正し、標準のSLを30に変更し、移動します。void Trailing(){ int SLoss = 1;double StopL = NormalizeDouble (OrderOpenPrice() + SLoss*Point, Digits);Double StopL2 = NormalizeDouble (OrderOpenPrice() - SLoss*Point, Digits);for (int i=OrdersTotal() - 1; i>=0; i--){if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic){if (OrderType() == OP_BUY && OrderStopLoss() >= StopL){if (ビッド-ストップL > トレイリングストップ*ポイント){if (OrderStopLoss() < Bid-(TrailingStop+TrailingStep)*Point){if(!OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Bid-TrailingStop*Point, Digits), 0, 0))Print(" Ordermodification error!");}}}if (OrderType() == OP_SELL && OrderStopLoss() <= StopL2){if (StopL2 - Ask > TrailingStop*Point){if (OrderStopLoss() > Ask+(TrailingStop+TrailingStep)*Point){if(!OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Ask+TrailingStop*Point, Digits), 0, 0))Print("Order modification error!");}}}}}}} どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - Any questions from newcomers 出口戦略ステップ・ストップとトレーリング・ストップの比較 Artyom Trishkin 2017.05.29 07:20 #2176 Alexey Viktorov:パラボリックの場合は、条件にフラグを入れるだけなので簡単です。あるいは、int型の 単純な変数で、信号ごとに値が変化するもの。 そうでなければ、最初のシグナルの後、スタティック変数は真のままです。 Artyom Trishkin 2017.05.29 07:27 #2177 AlGuru:皆さんこんにちは、Trailing Stopについて教えてください。トレーリングストップは、最初はSL=100で、ポジションが30pips上にあるときに発動させるという条件で書きました。オープンポジションの直後に修正し、標準のSLを30に変更してから移動させます。...どのように役立つ のでしょうか?そこにテンプレートを掲載しましたので、それを元に自分で好きなものを作ってください。 Alexey Viktorov 2017.05.29 08:51 #2178 Artyom Trishkin: そうでなければ、最初のシグナルの後、スタティック変数はtrueのままです。なんでジェルザが入ってるんだ?flag == true;またはflag == false;だと思うのですが、これはコードにある if(flag && **** if(! flag && ****片側に交差点があれば、もう片側に交差点があるのを待つ...。そうして、ループは閉じられる。しかし、最初にどうすれば正しく接続できるかは、本人に考えさせよう。あるいは後で聞くか...。 Artyom Trishkin 2017.05.29 08:51 #2179 Alexey Viktorov:なんでジェルザが入ってるんだ?flag == true;またはflag == false;だと思うのですが、これはコードにある 片側に渡るときは、反対側への渡りを待つ...。...といった具合に、サイクルが終了します。しかし、最初の起動時にどのように正しく接続するかは、本人に考えさせよう。あるいは後で聞くか...。一方向の異なるバー上に2つの信号がある場合?スイングしかないんですね。しかし、シグナルは常にシグナルがあるときに送るべきですが、シグナルを送るかどうかの判断は別にします。各方向ごとにフラグを持ち、それを切り替えるのが最適だと思われます。しかし、一方向の信号が反対方向の信号に依存するようなことはありません。 Alexey Viktorov 2017.05.29 09:13 #2180 Artyom Trishkin:2つのシグナルが同じ方向の異なるバー上にある場合?一振りしかできない。しかし、シグナルは常にシグナルがあるときに送るべきですが、シグナルを送るかどうかの判断は別にします。各方向ごとにフラグを持ち、それを切り替えるのが最適だと思われます。しかし、一方向の信号が反対方向の信号に依存するようなことはありません。アルテム、私はあなたへの返事を次のような言葉で始めた。 トレーディング、自動売買システム、トレーディング戦略のテストのためのフォーラムです。 MQL4に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 アレクセイ・ビクトロフ さん 2017.05.29 08:09 パラボリックの場合は簡単 です。 パラボリックは厳格な交替制をとっており、一方向に2つのシグナルを出すことは、たとえ異なるバーであっても、不可能である。しかも、そのために何かを工夫する必要は全くなく、MAのようなゼロバーでもガタつかないのです。 1...211212213214215216217218219220221222223224225...1953 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
ボリューム0.1の注文を出すブロック(void start()関数の直後)を使って、あなたのコードを完成させました。
しかし、なぜかプログラムは、これらの注文の閉鎖に応じて増加した量(各0.3ロット)の任意の順序を開くことはありません。
あなたのコードで私が理解できないこと
1.私の理解が正しければ、МН=123は0.3ロットの出来高の注文にのみ割り当てられていますね。
datetime関数SearTim (int s)で、MH=123で出来高が0.1の注文を探していますね。
しかし、出来高0.1の注文はМН=123とすることはできません。なぜなら、このMMは出来高0.1の注文にのみ割り当てられるからです
datetime SearTim(int s) と int sear() 関数の本体、特にコメントでは、出来高0.3の注文を出すのに必要な
なぜ、同じ条件でより大きな数量の注文を何度も出さなければならないのか理解できない。
すでに1ブロック目で出来高を増やした注文を開いていますね。
0.1の注文をそれぞれ決済した後、0.3の出来高の注文をオープンし、0.1の値を維持するようなコードを書いていただけるとありがたいのですが、いかがでしょうか?
この場合、Print()関数と 私のささやかな知識、参考書の助けを借りて、あなたのコードから私の疑問に対するすべての答えを見つけるためにベストを尽くします。
注
0.1巻と0.3巻の同じタイプの注文があるのですが、SELだけです。そのため、私の勘違いでなければ、int sear()関数で注文の種類(BAYかSELか)を計算する必要はないのです。
私のプログラムの最終目標は、0.1注文がSLで決済された0.3注文によってその終値で決済された後のオープニングの時間値(分でも秒でもなく時間だけ)を記憶することであることを、もう一度思い出していただきたい。
プログラミング言語を知っていることが前提なので、あまり説明できないのが申し訳ないのですが。もうプログラマーだと思うので、プログラミングを知っている人を頼っていたんです。
まずプログラミングを学ばなければならない。何をどのようにと説明すると、それはプログラミング言語の習得になります。
EAの例、書き方を見て、一からプログラムを書いてみる。しかも、すでに複雑になっているプログラムを書こうとしているわけですから。
チュートリアルやコマンドの書き方の例、サンプルモジュールを見てください。
この素朴な疑問を解決する、クロージングブロックをご紹介します。
注文の利益がプラスになると、その注文を決済し、その利益全体で、どれだけの負けポジションが可能かを判断します。Perekrが有効な場合。
儲かるポジションの利益が負けるポジションの損失をすべてカバーしたときのみ、つまり一方の注文の利益が他方の注文の損失と同じかそれ以上になったときに、両方のポジションを閉じるように変更する必要があるのです。
if(Mas_Tip[1]>0)
{
if(Bidt-step*Point>=NormalizeDouble(Bid,Digits))
{
Profit=AccountBalance()-StartProfit;
Askt=NormalizeDouble(Ask,Digits);
Bidt=NormalizeDouble(Bid,Digits);
for(int i=1; i<=OrdersTotal(); i++)
{
if(OrderSelect(i-1,SELECT_BY_POS)==true && OrderType()==OP_SELL &&
OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if(Razn<2)
{
if(Perekr && OrderProfit()>0 && max_lot>=Lots_per) //перекрытие
{
double profit=OrderProfit();
Print("закрываю по перекрытию");
ClosePosBySelect(OrderLots());
for(int f=OrdersTotal()-1;f>=0;f--)
{
if(OrderSelect(f,SELECT_BY_POS)==true && OrderType()==OP_BUY &&
OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if(OrderProfit()<0)
{
if(profit>=MathAbs(OrderProfit()))
{
Print("закрываю по перекрытию");
ClosePosBySelect(OrderLots());
}
友よ、こんにちは。初心者に教えてほしいのですが
ある指標と価格のクロスオーバーをメールで通知してほしいのですが。やり方は理解できたのですが、クロスした途端に何百通ものメールが届き、今のローソクが閉まるまで無限に送り続けられるのです。メッセージを1つだけ送信するにはどうしたらよいですか?以下はその一例です。
if((iSAR(NULL, 0,Step,Maximum, 1)<iClose(NULL,0,1))&(iSAR(NULL, 0,Step,Maximum, 2)>iClose(NULL,0,2))) ){ (iSAR(NULL, 0,Step,Maximum, 2))&(iSAR(NULL,0,1))> iClose(NULL,0,2)))
bool res = SendMail("Buy Signal", "Buy Signal");
}
if((iSAR(NULL, 0,Step,Maximum, 1)>iClose(NULL,0,1))&(iSAR(NULL, 0,Step,Maximum, 2)<iClose(NULL,0,2)))) { { (iSAR(NULL, 0,Step,Maximum, 2))&iClose(NULL,0,2))
SendMail("売りシグナル", "売りシグナル");
}
友よ、こんにちは。初心者に教えてほしいのですが
ある指標と価格のクロスオーバーをメールで通知してほしいのですが。やり方は理解できたのですが、プライスクロスが起きるとすぐに何百通ものメールが届き、現在のローソク足が閉じるまで無限に送り続けられるのです。メッセージを1つだけ送信するにはどうしたらよいですか?以下はその一例です。
if((iSAR(NULL, 0,Step,Maximum, 1)<iClose(NULL,0,1))&(iSAR(NULL, 0,Step,Maximum, 2)>iClose(NULL,0,2))) ){。
bool res = SendMail("Buy Signal", "Buy Signal");
}
if((iSAR(NULL, 0,Step,Maximum, 1)>iClose(NULL,0,1))&(iSAR(NULL, 0,Step,Maximum, 2)<iClose(NULL,0,2)))) { { (iSAR(NULL, 0,Step,Maximum, 2))&(iSAR(NULL,0,1))>iClose(NULL,0,2))
SendMail("売りシグナル", "売りシグナル");
}
パラボリックの場合は、条件にフラグを入れるだけなので簡単です。あるいは、int型の 単純な変数で、信号ごとに値が変化するもの。
皆さんこんにちは、Trailing Stopについて教えてください。トレーリングストップは、最初はSL=100で、ポジションが30pips上にあるときに発動させるという条件で書きました。しかし、ポジションを開いた直後に修正し、標準のSLを30に変更し、移動します。
void Trailing()
{
int SLoss = 1;
double StopL = NormalizeDouble (OrderOpenPrice() + SLoss*Point, Digits);
Double StopL2 = NormalizeDouble (OrderOpenPrice() - SLoss*Point, Digits);
for (int i=OrdersTotal() - 1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if (OrderType() == OP_BUY && OrderStopLoss() >= StopL)
{
if (ビッド-ストップL > トレイリングストップ*ポイント)
{
if (OrderStopLoss() < Bid-(TrailingStop+TrailingStep)*Point)
{
if(!OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Bid-TrailingStop*Point, Digits), 0, 0))
Print(" Ordermodification error!");
}
}
}
if (OrderType() == OP_SELL && OrderStopLoss() <= StopL2)
{
if (StopL2 - Ask > TrailingStop*Point)
{
if (OrderStopLoss() > Ask+(TrailingStop+TrailingStep)*Point)
{
if(!OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Ask+TrailingStop*Point, Digits), 0, 0))
Print("Order modification error!");
}
}
}
}
}
}
}
パラボリックの場合は、条件にフラグを入れるだけなので簡単です。あるいは、int型の 単純な変数で、信号ごとに値が変化するもの。
皆さんこんにちは、Trailing Stopについて教えてください。トレーリングストップは、最初はSL=100で、ポジションが30pips上にあるときに発動させるという条件で書きました。オープンポジションの直後に修正し、標準のSLを30に変更してから移動させます。
...そうでなければ、最初のシグナルの後、スタティック変数はtrueのままです。
なんでジェルザが入ってるんだ?flag == true;またはflag == false;だと思うのですが、これはコードにある
片側に交差点があれば、もう片側に交差点があるのを待つ...。そうして、ループは閉じられる。しかし、最初にどうすれば正しく接続できるかは、本人に考えさせよう。あるいは後で聞くか...。
なんでジェルザが入ってるんだ?flag == true;またはflag == false;だと思うのですが、これはコードにある
片側に渡るときは、反対側への渡りを待つ...。...といった具合に、サイクルが終了します。しかし、最初の起動時にどのように正しく接続するかは、本人に考えさせよう。あるいは後で聞くか...。
一方向の異なるバー上に2つの信号がある場合?
スイングしかないんですね。
しかし、シグナルは常にシグナルがあるときに送るべきですが、シグナルを送るかどうかの判断は別にします。
各方向ごとにフラグを持ち、それを切り替えるのが最適だと思われます。しかし、一方向の信号が反対方向の信号に依存するようなことはありません。
2つのシグナルが同じ方向の異なるバー上にある場合?
一振りしかできない。
しかし、シグナルは常にシグナルがあるときに送るべきですが、シグナルを送るかどうかの判断は別にします。
各方向ごとにフラグを持ち、それを切り替えるのが最適だと思われます。しかし、一方向の信号が反対方向の信号に依存するようなことはありません。
アルテム、私はあなたへの返事を次のような言葉で始めた。
トレーディング、自動売買システム、トレーディング戦略のテストのためのフォーラムです。
MQL4に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。
アレクセイ・ビクトロフ さん 2017.05.29 08:09
パラボリックの場合は簡単 です。
パラボリックは厳格な交替制をとっており、一方向に2つのシグナルを出すことは、たとえ異なるバーであっても、不可能である。しかも、そのために何かを工夫する必要は全くなく、MAのようなゼロバーでもガタつかないのです。