MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1803

 
Artyom Trishkin #:

あなたのコードでは、1つのポジションが開いている場合、別のポジションは反対の信号で開くことはありません。それは、まず、シグナルが来たら、反対側のポジションがあるかどうかを確認して、それを決済することです。

しかし、やはりこれだけでは、戦略を改善する可能性が大きく狭まってしまいます。

注文の有無(特に4つ-保留中の注文(これは正しい)およびポジション(これは間違っている))に拘束されることは避けるべきです。

いや、種類別の注文数、ポジション数が手元にあるのは正しいし、必要だ。しかし、シグナルのみで注文がないことを当てにするのは間違っています。

一般的には、注文やポジションを計算する機能(注文やポジションの数が変わると構造体を埋める機能を1つ)、ポジションをオープン/クローズする機能、注文を設定する機能、アラーム機能などを持つのが正しい方法です。さらに、ポジションデータ(オープンまたはクローズ)を任意の値で比較する機能。

このセットから、あらゆる戦略を構築することができる。

Artem、TPまたはSLで閉じるまで市場に1つの注文がある戦略です。
 
MakarFX #:

あなたのコード

(バーが開き、注文がない)

信号の確認 - 信号なし

...次のバーを待ちます。

前回と同じ失敗を繰り返した

追伸

なんだ

は、注文の開封後に実施される必要があります。

実は、私のコードは別のことを想定して作られたものなんです。始値でしか取引しないロボットの場合。私は、私からそれを取り出して、遵法精神に富む市民 ユーザーのコードに加え、コメントに従って変更したに過ぎません。すべてのニュアンスを一度に考慮することはできません。ロボットのテストの時だけ見ることができます。

しかし、ひとつだけあります。また、あらゆることに配慮しているようですね。シグナルを受信し、関数bSignalSellまたはbSignalBuyが注文を開くコマンドを送信し、trueを返しました(最初のポイント)2点目は、まだ注文が開かれていない(端末でコマンドの順番待ちをしている)ことです。そして、コマンド キューが上がってきたら、サーバーに送信します(この時も時間です)。サーバー上では実行される。または、サーバーがいくつかの可能性のある理由のうちの1つによって実行を拒否している(詳細はドキュメントを参照)。または、そこに到達しない(干渉、接続不良、その他のネットワークバグ)。そして、あなたのロボットは注文を開いたと思い、バーの開始時間を更新します。大丈夫です。しかし、その注文は未決済注文のリストに表示されていない。このように、リストに0件の注文があり、ロボットが「考えて」いるとします:「大丈夫だ、市場に参入した」。その結果、エントリー失敗後のバー全体にシグナルが 発生しますが、Expert Advisorはそれを「見」ずに何もしません。そのような事態はあり得るのでしょうか?可能なんです!つまり、あなたのコードはあまり良くないということです。もっとよく考えたほうがいい。あるいは、遵法精神に富む 市民に考えさせる。残念ながら、今は無理です。とても興味深いプロジェクトに取り組んでいます。そして、すべてのメカニズムを備えた完全に動作する適切なEAを作成することは、優れた収益性の高い取引システムのためにのみ意味があります。このロボットはStrategy Testerで実行するだけで、私のバージョンなのか、それともあなたの開発したバージョンなのかを確認することができます。何の違いもないのです。

 
законопослушный гражданин #:

今頃気がつきました。

bool bSignalBuy()
  {
   if(dMA > Open[1] && dMA < Close[1])  //Open[1] и Close[1]- цены открытия и закрытия каждого бара текущего графика.
      return(true);

   return(false);
  }
Open[1] и Close[1]

インデックス 1.

dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 0);

インデックスが0のMAがあるのに対して!つまり、バー全体を歩き回り、OpenとCloseを超えることができるのです。したがって、MAを1倍して指数化するのがよい。

dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 1);

そして、すべてのシグナルは形成されたバー上で例外的に取得され、ロボットは建値でのシグナルで取引システムと完全に一致することになるのです。したがって、ロボットはバーの開きを追跡し(私はすでにこのコードを追加しました)、新しく形成されたバーでエントリーするだけでよいのです。より信頼性の高いものになります。そして、もともと間違った入力アルゴリズムのためにマカーのようにひねくれる必要もないでしょう。

 
Mihail Matkovskij #:

今頃気がつきました。

インデックス 1.

インデックスが0のMAがあるのに対して!つまり、バー全体を歩き回り、OpenとCloseを超えることができるのです。したがって、MAを1倍して指数化するのがよい。

そして、すべてのシグナルは形成されたバー上で例外的に取得され、ロボットは建値でのシグナルで取引システムと完全に一致することになるのです。

これが信号の本質です。

現在のMAは前のローソクのボディに入り、どのローソクかによって(UP/DN)同じシグナルを出します。

 
MakarFX #:

これが信号の本質です。

現在のMAは以前のローソク足のボディに入り、ローソク足(UP/DN)によっては同じシグナルになります。

この場合、MAは下の時間枠の指標1で描かれるべきです。そうすれば、変更を適用する必要はありません。高い方の時間枠の始値と終値の間に、低い方の時間枠にいくつかの(あるいは多くの)バーが存在します。なぜタイムフレームが発明されたのか、ご存知でしょうか?もしそうでないなら、日本のローソク足の歴史からこの問題の勉強を始めてください。要するに、テクニカル分析を簡略化するということです。また、デジタル時代の到来により、取引システムの離散化も簡素化されました。

 
Mihail Matkovskij #:

その場合、MAは下の時間枠の指標1で取られるはずです。そうすれば、ひねくれることもないでしょう。上の時間枠のOpenとCloseの間に、下の時間枠にいくつかの(または多くの)バーが存在することになります。なぜタイムフレームが発明されたのか、ご存知でしょうか?もしそうでないなら、日本のローソク足の歴史からこの問題の勉強を始めてください。要するに、テクニカル分析を簡略化するということです。また、デジタル時代の到来により、取引システムの離散化も簡素化されています。

なぜあなたが怒るのか理解できません。この男は自分の見たままの戦略を書いている、この男は私ではない。

私は、"同じバーで複数のオープンを避けるには?"という彼の質問に答えただけです。

何を学ぶか......自分のことは自分で知り、わからなければ聞く。今、私は誰にも何も聞いていません。

 
MakarFX #:

なぜ私に八つ当たりするのか理解できない。その人は自分の見たままの戦略を書いていて、その人は私ではありません。

私は、"同じバーで何度も開くのを避けるには?"という彼の質問に答えただけです。

何を学ぶか......自分のことは自分で知り、わからなければ聞く。今、私は誰にも何も聞いていない。

不思議ですね。私は問題の真相を探ろうとしているのに、あなたはある種の人間関係の解明について話しているのです。私はプログラミングのことだけを考えてコミュニケーションしています。もし何かで気分を害したなら、気分を害さないことです。私は15年間、ソフトウェアを書いてきました。あなたの 意見では 、私のコードは正しく 動作しないそうですね。悪気はないんです、自動売買システムの仕組みを説明しようとしているんです。純粋に技術的な話です。そして、あなたは私に、ある種の侮辱を話して いる:)

 
Mihail Matkovskij #:

それは変ですね。私は問題の真相を探ろうとしているのに、あなたはある種の人間関係について話しているのです。私はプログラミングのことだけを考えてコミュニケーションしています。気分を害したとしても、気を悪くしないでください。私は15年間、ソフトウェアを書いてきました。あなたの 意見では 、私のコードは正しく 動作しないそうですね。悪気はないんです、自動売買システムの現実の仕組みを説明しようとしているんです。純粋に技術的な話です。そして、あなたは私に、ある種の侮辱を話して いる:)

だから、あなたのコードが間違っていること(この場合)も説明したし、あなたはEAをやり直す必要があると言っている)
 
Mihail Matkovskij #:

私は15年間、プログラムを書き続けています。

提案があります。電報は内密に頼む。

 
MakarFX #:
だから、あなたのコードが間違っていること(この場合)も説明したし、あなたはEAをやり直す必要があると言っている)

この場合、ねじれないように手直しが必要です。なぜなら、私が追加したコードは、先ほど言ったように、始値シグナルを持つロボット用に設計されているからです。これはおかしいと思いました。そして、その理由がわかったのです。最初からうまくやれば、将来的に困ることはないでしょう。このように、常に原因を探り、結果と戦わないことが大切です。