mql4言語の特徴、微妙なニュアンスとテクニック - ページ 10

 
Alexey Viktorov:

何が驚きなのか、私には理解できません。ドキュメントには、オーダータイプのint値があります。

OP_BUY

0

購入

OP_SELL

1

販売する

OP_BUYLIMIT

2

買い指値注文

OP_SELLLIMIT

3

売り指値注文の 保留

OP_BUYSTOP

4

買付停止注文の保留

OP_SELLSTOP

5

売り停止注文の保留


#define OP_BALANCE 6
#define OP_CREDIT 7

だから、6セルのアレイでは、時にはやりすぎになることもある。

 

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

EAのコメントを左隅から右隅に移動させたいのですが?

fxsaber さん 2018.07.10 15:13

// Вывод комментария по примерным координатам
void CommentXY( string Str, const uint X = 0, const uint Y = 0 )
{
  string Shift = NULL;
  
  StringInit(Shift, X >> 2, ' ');
  
  if (StringLen(Shift))
  {
    StringReplace(Str, "\n", "\n" + Shift);
    
    Str = Shift + Str;
  }
  
  if (Y)
  {
    StringInit(Shift, Y / 14, '\n');
    
    Str = Shift + Str;
  }
  
  Comment(Str);  
}


アプリケーション

void OnStart()
{
  const uint Height = 200;
  const uint Width = 200;
  
  while (!IsStopped())
  {
    CommentXY("Hello World!\nCommentXY", MathRand() * Width / SHORT_MAX, MathRand() * Height / SHORT_MAX); // Вывод комментария со сдвигом (ноль - левый-верхний угол).
    
    Sleep(200);
  }
}
 

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

履歴に残る最後の注文を正しく選択する方法は?

fxsaber さん 2018.07.17 03:27

MT4の取引履歴は、終値でソートされており、このルールは変更されません。

 
fxsaber:

開発者からの正式な回答はあるのでしょうか?今のところ、検索して、考えて、決めたとしか思えません。

 
Artyom Trishkin:

開発者からの正式な回答はあるのでしょうか?今のところ、自分で探し、考え、決めたとしか思えません。

自給自足」のレベルについての私の結論は、このスレッドの冒頭のこれと同じです。

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

mql4 の特殊性、ヒントとコツ

注文の種類と それに対応する価格を定義する必要はありません。OrderClosePrice()と書けば十分です。


無意味・パラノイアに悩む必要はない。

 
fxsaber:

自己責任」のレベルについての私の結論は、このスレッドの冒頭のこれ以上ないものです。


無意味・パラノイアに悩まされる必要はない。

EAが一夜にして崩壊し、「パラノイア」に陥っていない人の多くが緊急にコードを書き直した時期を見逃したのでしょう。トリアージに頼ったからです。昔のことですが、人には思い出があるものです。困った人たちは、仕分けに依存しないコードを書くようになった。トラブルに巻き込まれたわけではなく、掲示板で読んで心に刻んだだけなのです。

 
Artyom Trishkin:

パラノイアに陥っていない人の多くは、EAが一夜にして崩壊したため、緊急にコードを書き換えた時期を見逃しているはずです。トリアージに頼ったからです。昔のことですが、人には思い出があるものです。困った人たちは、仕分けに依存しないコードを書くようになった。トラブルに巻き込まれたわけではなく、掲示板で読んで心に刻んだだけなのです。

残念ながら、この神話はフォーラムの歴史に何の裏付けもありません。しかも、開発者は一貫して「原則的にそのような変更はできない」という立場を明確にしています。


例えば、次のように気軽に書いてもよいでしょう。

if (OrderType() <= OP_SELL)
  ReverseType = 1 - OrderType();


代わりに

if ((OrderType() == OP_BUY) || (OrderType() == OP_SELL))
  ReverseType = (OrderType() == OP_BUY) ? OP_SELL : OP_BUY;


自由に書いていただいて結構です。

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

mql4言語の特殊性、ヒントとコツ

fxsaber さん 2018.04.03 16:15

double Lots[] = {0, 0, 0, 0, 0, 0, 0, 0};

for (int i = OrdersTotal() - 1; i >= 0; i--)
  if (OrderSelect(i, SELECT_BY_POS))
    Lots[OrderType()] += OrderLots();

など

 
fxsaber:

残念ながら、この神話はフォーラムの歴史において何の裏付けもありません。しかも、開発者は一貫して「原則的にそのような変更はできない」という立場を明確にしています。

例えば、次のように自由に書いてもよい。


なぜ、このような擬似最適化、つまり常に念頭に置いておかなければならないニュアンスがあるのでしょうか?そのような前提(名前付き定数の 意味)に依存しないコードを書くことは、本当に難しいのでしょうか?このような構成は、コンパイラのニュアンスに関する知識を示すことを除けば、理解しやすいということでは全くないのでしょうか?

 
Ihor Herasko:

なぜ、このような擬似最適化を行うのか、そのニュアンスを常に念頭に置いておかなければならないのか。このような仮定に依存しないコードを書くことは、本当に難しいのでしょうか(この、あるいはこの名前の定数は 何を意味しているのでしょうか)。このような構成は、コンパイラのニュアンスに関する知識を示すことは別にしても、理解しやすいということは全くないのでしょうか?

不思議なもので、このようなコードを読んでも何の問題もないのです。さらに、その読み取りと理解は、「正規の」コードよりも高速です。

さて、上のLots[]を使った例は、コードが超ラクラクで同時にクリアになることを示す宝物です。そして、注意してほしいのは、それはまったく「正統派」ではないということです。

おそらく、多くのマーケット/フリーランスの仕事のソースコードを見ると、「正統派」コードのボロボロに出くわすだけでなく、ひどい非効率的なパフォーマンスや、最も重要な要素である「読みながらコードを理解する」ことにも遭遇することでしょう。


同じように消えない継続への愛は、言葉の可能性を全く無視したものです。同じことをするのに200行のコードより、100行のコードの方がずっとよく認識されます。これが、当初MQL5に対して文句を言われた理由です。QBでMT4のコードをMT5用に再設計したものを見てください。TCのロジックを理解することはほとんど不可能です(コードはずっと大きくなっています)。MT4オリジナルにアクセスして、コードを見る方が簡単です。

 
fxsaber:

不思議なことに、このようなコードを読んでも何の問題もないのです。さらに、その読み取りと理解は、「正規の」コードよりも高速です。

多くのソフトウェア会社では、そのようなコードは指を叩き切られてしまう。まず、いつもどこでも必要なのは、「無駄な読み」をしないことです。例えば、関数を入力する際に条件を使用する場合。

if (<условие>)
{
}

と書くことが推奨されています。

if (!<условие>)
   return;

この方法は、条件のアタッチメントを本当に救済するものです。

さて、上のLots[]の例は、コードがいかに超古典的でありながら完全に理解しやすいかを示す、まさに宝の山です。そして、注意してほしいのは、それはまったく「正統派」ではないということです。

改めて見ると面倒くさいですね。誰もOrderType()関数が何を返すか確認しなかったからです。それとも、-1や6が返ってきたのでしょうか?これは、コンパイラのプロパティに依存する例であり、常に避けるべきものです。あなた自身、クロスプラットフォームのコードの例をたくさん挙げていますね。では、なぜ今回はそこから離れていくのでしょうか?新しいMQコンパイラが登場すると、このコードはもう正しく動作しなくなります。

同じ継続への消えない愛は、言葉の可能性を全く無視したものです。同じことをするのに200行のコードより100行のコードの方がずっと理解しやすい。これが、当初MQL5に対して文句を言われた理由です。QBでMT4のコードをMT5用に再設計したものを見てください。TCのロジックを理解するのは非常に困難です(コードは何倍も大きくなっています)。MT4オリジナルにアクセスして、コードを見る方が簡単です。

コンティニューでも同じ状況です。みたいなコード。

if (OrderSelect(i, SELECT_BY_POS) && OrderSymbol() == Symbol() && OrderMagicNumber() == m_nMagicNumber)
{
}

の方が読みにくい。

if (!OrderSelect(i, SELECT_BY_POS))
   continue;

if (OrderSymbol() != Symbol())
   continue;

if (OrderMagicNumber() != m_nMagicNumber)
   continue;
それでいて、実行の効率はどちらも同じです。