より少ないコード、より多くのアクション...EAを書く - ページ 5

 
Vladimir Simakov:

何を得たいのか?正直なところ、よくわからない。最初はラフレームワークが意図されているのかと思いましたが、そうではなく、指標、注文、意思決定の標準的なアルゴリズムなどのラッパークラスは何もありません。もっと読みやすいのは、fast.Get(2)>=slow.Get(1); という構成ですが(あくまで例として)、宣言があります。

CMA fast=new CMA(NULL,0,12,...);

CMA slow=new CMA(NULL,0,100,...);

今、私たちは議論することができます、一方、あなたは、IMHOは、その場で踏んでいる。

例えば、fast.Get(2)>=slow.Get(1); の代わりに、このようなコードを書いても、全く問題なく動作します。

table[FAST_MA][1] >=table[SLOW_MA][2]

は、Excelで表計算ソフト のように動作します。データ(数式)が相互に依存することがあるため、個々のハンドルではなく、表にまとめています。

できるかもしれない(ただ、まだ特定のライブラリでやったことがない)。

fast=table[FAST_MA]; slow=table[SLOW_MA];

とすると、 fast[2]>slow[1] はさらに読みやすくなります。

と、すべての内部計算が「オンデマンド」で実行されます。

 
Maxim Kuznetsov:

また、例えば、fast.Get(2)>=slow.Get(1); の代わりに、全く合法的で動作するコードです。

table[FAST_MA][1] >=table[SLOW_MA][2]

は、表計算ソフトのExcelと同じように動作します。データ(数式)が相互に依存することがあるため、個々のハンドルではなく、表にまとめています。

できるかもしれない(ただ、まだ特定のライブラリでやったことがない)。

fast=table[FAST_MA]; slow=table[SLOW_MA];

で、 fast[2]>slow[1] がさらに読みやすくなります。

そして、すべての内部計算が "オンデマンド "で行われます。

なんだか松葉づえみたいですね。また、端末が作成するワイプバッファに、doubleの配列を追加しています。履歴の深さいっぱいまで(M1USHORT_MAXの 場合、記憶が正しければ*8バイト)メモリを確保するとのことですが、その過程で高価なArrayResizeを常用する予定なのでしょうか。
 
Vasiliy Sokolov:

そうですね、言語がわかっていても、自分のコードを読むのはとても難しいです。

実際、このルールはあらゆるサードパーティのコードに有効です。問題は、どのコードが難しいのではなく、読みやすいかだけです。

そして、ここでは、ほとんど常にMQL4コードを読み、編集 することが容易になっています。開発者が一度当てているのです。

 
fxsaber:

実際、このルールはあらゆるサードパーティのコードに有効です。問題は、どのコードが難しくないが読みやすいか、だけだ。

そして、ほぼ常にMQL4のコードを読み、編集 することが容易になっています。開発者が一度当てているのです。

でも、質問させてください。推測はどうだったのでしょうか?標準的なC/C++では、取引やチャートに関する特定のクエリを除き、C++の「windows.h」と考えることができる。

だから、車輪の再発明をしない開発者に敬意を表します。リンク禁止は紛れもないマイナスですが、mqlの後にC/C++に落ちた時は、喜べませんでした。だからこそ、もし奇跡が起きたら、代替案として、C# usafeのように、特に私のような人間には、壁にぶつかりたいなら自殺しろ、警告したぞ、みたいなことを考えるべきかもしれません。

 
Vladimir Simakov:

質問させてください。その推測とは?

Kodobaseには、MT4のEAをリメイクしたMT5 EAがたくさんあります。オリジナルとリメイクのコードを比較する。


明らかに、MT4オリジナルのロジックを把握する方がはるかに簡単です。しかし、TSで何かを修正する必要がある場合は、さらに簡単です。MQL4が世界中のフォーラムでトレーディングアルゴリズムに関する議論のスタンダードになっているのは、決して無駄なことではありません。他の言語はなく、MQL4です。そして、それはMT4の普及に大きな役割を果たしたのであって、その逆ではない。


また、MT5の変換について言えば、それらは曲者で、常に機能するとは限りません。簡単な例です。ポジションを閉じる 要求を送信したが、閉じる代わりに取引注文を受信した。本当のアカウントに行くためには、たくさんの仕掛けを解いていかなければなりません。MT4なら簡単で確実です。

Совершение сделок - Торговые операции - MetaTrader 5
Совершение сделок - Торговые операции - MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 
fxsaber:

コドベースには、MT4のEAをリメイクしたMT5 EAがたくさんあります。オリジナルとリメイクのコードを比較する。


明らかに、MT4オリジナルのロジックの方が理解しやすい。しかし、TSで何かを修正する必要がある場合は、さらに簡単です。MQL4が世界中のフォーラムでトレーディングアルゴリズムに関する議論のスタンダードになっているのは、決して無駄なことではありません。他の言語はなく、MQL4です。そして、それはMT4の普及に大きな役割を果たしたのであって、その逆ではない。


また、MT5の変換について言えば、それらは曲者で、常に機能するとは限りません。簡単な例です。ポジションを閉じる 要求を送信したが、閉じる代わりに取引注文を受信した。本当のアカウントに行くためには、いろいろな仕掛けが必要なんです。MT4なら簡単で確実です。

だから、秩序・位置の類推で動くのはおかしいんです。mql4では1つのエンティティで、mql5では2つの異なるエンティティがあります。
 
そして、そうです、mt5は取引所で働くために作られ、注文/ポジションで働く異なる原理があります、だから、数学を学び、泣き言を言わない、すべてがうまくスムーズにそこで動作しますが、取引所とFXの取引の仕組みは、最初に学び、それらの違いを考慮に入れなければならないのです。そのために必要なことは、開発者がドックで説明したとおりで、あとはあなた次第です。
 
Vladimir Simakov:
だから、秩序・位置の類推で動くのはナンセンスなんです。mql4では1つのエンティティ、mql5では2つの異なるエンティティなので、そのためのラッパークラスを実装し、mql4で半年間行ってきたようなオーダーの扱いを忘れようと思っています。
ウラジミール・シマコフ
mt5も為替を扱うために作られたもので、そこでは注文やポジションを扱うという別の原則があります。ですから、数学を学び、不平を言わず、すべてがうまく機能しています。そのために必要なことは、開発者がドックで説明したとおりで、あとはあなた次第です。

あなたの書いていることは本当に泣き言なので、もっと視野を広げるようにしてください。

 
Vladimir Simakov:
松葉杖のようです。端末がいずれ作成するワイプバッファの他に、アレイダブルも追加しています。履歴の深さいっぱいまでメモリを確保する(M1USHORT_MAXの 場合、記憶が正しければ*8バイト)とか、運用の過程で高価なArrayResizeを常用する予定とか、そういう理解でいいんでしょうか?

もちろん、メモリも割り当てています。計算やデバッグに必要な深さまで。この断片では30であり、これは十分すぎるほどである。もしどこかで、例えば深さ50の標準偏差を計算する必要があるのなら、キャッシュを増やすべきでしょう。しかも、それはあくまでも計算を早くするためのもの。

 
fxsaber:

あなたの書いていることは本当に泣き言なので、もっと視野を広げるようにしてください。

私は大丈夫ですが、これはポジションと注文の間の接続がmql5で実装されている方法です(最後の仕事の一部としてそれは、原則として、このフォームでは、それはすでにヘッジ口座用のライブラリに含まれることになります)。

CHedge::CheckOrder(void){
   if (!CheckPointer(cOrder)) return;
   switch(cOrder.Control()){
      case ORDER_FULL:        cPosition=NewPosition(cOrder);
      case ORDER_REMOVE:
      case ORDER_ERROR:       delete cOrder;}}