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

 
trader781:

よし、やってみよう。

for(i=OrdersTotal()-1; i>=0; i--)
     {
      if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) && (OrderSymbol()==Symbol())
         && (OrderMagicNumber()==Magic) && (OrderType()<2))
         orders[count1].Ticket=OrderTicket();
         orders[count1].lot=OrderLots();
         orders[count1].orderopenprice=OrderOpenPrice();
         orders[count1].ordertype=OrderType();
         orders[count1].profit=OrderProfit();
         orders[count1].stoploss=OrderStopLoss();
         count1++;
     }

だろう?

また、中括弧も必要です。そうしないと、if()の 後の最初の行だけが機能します。必要ないところにたくさんブラケットがあって、必要なところにブラケットがないんですね。このため、プログラムのロジックが壊れ、時には大変なことになります。また、カウンターはグローバルである必要はありませんが、それほど重要ではありません。

for(i=OrdersTotal()-1; i>=0; i--)
{
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol()
         && OrderMagicNumber()==Magic && OrderType()<2)
         {
         orders[count1].Ticket=OrderTicket();
         orders[count1].lot=OrderLots();
         orders[count1].orderopenprice=OrderOpenPrice();
         orders[count1].ordertype=OrderType();
         orders[count1].profit=OrderProfit();
         orders[count1].stoploss=OrderStopLoss();
         count1++;
         }
}
 
sile:
条件を書くのを手伝ってください:口座の利用可能資金が 入金額の50%未満である場合、{アクション} MT5

どの預金から?初期?それとも現在のバランスから?

バランスと比較すれば、そうですね。

if(AccountInfoDouble(ACCOUNT_MARGIN_FREE)/AccountInfoDouble(ACCOUNT_BALANCE)<0.5) {действие}
 
Vitalie Postolache:


mt5が欲しいんだと思ってた。

いいアイデアがある、書いてもいい、カウンターをオンティックの最初に置いて作業してもいい。

さて、私の場合、どうすれば何かを得ることができるのでしょうか。

で,さらに配列が2次元以上になる場合(書き込みと取り出しに差がある)には

この点について、少しお話を伺いたいと思います。
 
trader781:

よし、やってみよう。

struct myorder
{
int    Ticket;
double orderopenprice;
int   ordertype;
double profit;
double stoploss;
double  lot;
};

myorder orders[];

int i;
int count1=0;
void CalcOrders()
{
for(i=OrdersTotal()-1; i>=0; i--)
     {
      if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) && (OrderSymbol()==Symbol())
         && (OrderMagicNumber()==Magic) && (OrderType()<2))
         orders[count1].Ticket=OrderTicket();
         orders[count1].lot=OrderLots();
         orders[count1].orderopenprice=OrderOpenPrice();
         orders[count1].ordertype=OrderType();
         orders[count1].profit=OrderProfit();
         orders[count1].stoploss=OrderStopLoss();
         count1++;
     }
}    


だろう?

いいえ、正しくありません。

配列orders[]の値が0になっています。データをどこに書き込むのか?サイズがゼロの配列に?まさかね。配列に 書き込んだ後にカウンタをインクリメントする場合は,配列サイズを count1+1 だけインクリメントする必要があります.通常は,書き込む前にカウンタをインクリメントし,カウンタサイズ分だけ配列サイズを大きくしてから,インデックス[count1-1]単位で値を書き込むことになります.そして、上記で正しく指摘されているように - 条件をチェックした後に、他のすべてのアクションを中括弧で囲む必要があります。

なぜ、初歩的な知識や考えもないのに、何かをやろうとするのか。ただ「運が良かったから」?

 
こんにちは。指標の説明の最後に挿入することで、その指標のTFを変更できる(例:M5→M1)ようなユニバーサルコードはありますか?
 
Artyom Trishkin:

いいえ、そんなことはありません。

配列orders[]の値が0になっています。データをどこに書き込むのか?サイズがゼロの配列に?まさかね。配列に書き込んだ後にカウンタをインクリメントする場合は,配列のサイズを count1+1 だけインクリメントする必要があります.通常は,書き込む前にカウンタをインクリメントし,カウンタサイズ分だけ配列サイズを大きくしてから,インデックス[count1-1]単位で値を書き込むことになります.そして、上記で正しく指摘されているように - 条件をチェックした後に、他のすべてのアクションを中括弧で囲む必要があるのです。

なぜ、初歩的な知識や考えもないのに、何かをやろうとするのか。ただ「運が良かったから」?

誰かの教材学習能力に腐った小便と腐った卵を投げつけるのはやめよう。私の問題を解決するためにあなたが提案したのは、構造物の配列を構築する方法でした。教科書を開き、理解できる範囲で貼り合わせ、そのコードがどれだけ正しいかを計るために、ここに公開レビューとして投げかけたのです。まさか、私が一気に理想的なバリエーションを作るとは思っていませんよね?
 
trader781:
誰かの学習能力に腐ったチンポや腐った卵を投げつけるのはやめよう。私の問題を解決するためにあなたが提案したのは、構造物の配列という方法でした。教科書を開き、理解できる範囲で貼り合わせ、そのコードがどれだけ正しいかを計るために、ここに公開レビューとして投げかけたのです。まさか、私が一気に理想的なバリエーションを作るとは思っていませんよね?
そんな荒唐無稽な妄想をしておいて、協力を拒むべきでしょうか?最後にもう一度お願いします。アルゴリズムを紙に書き出して、鉛筆で何度か確認してください。配列の 値とサイズを書き出す - ループの各反復で何がどこに書き込まれるかを書き出す。あなたが適合すると思うコードの断片を探さないでください。
教えることは難しいことであり、特に本人が本当に学びたいと思っていない場合はなおさらであることを理解すること。
 
Artyom Trishkin:
このような暴力的なファンタジーの後、私は援助を思いとどまるべきなのでしょうか。最後にもう一度お願いします。アルゴリズムを紙に書き出して、鉛筆で何度か確認してください。値と配列のサイズ、つまりループの各反復で何がどこに書き込まれるかを書き出す。あなたが適合すると思うコードの断片を探さないでください。
教えることは難しいことだと理解すること。特に、相手が本当に学びたいと思っていない場合は、なおさらです。

アルチョム それはわかりますが、この場合、私も理解されることがあります。何も動作しないし、現在のバージョンでは動作しない。私は、コマンド自体が与えられた配列の必要な要素を引き出す必要があること、そしてこの特定のケース、例えば5番目の注文のストップロスに対してどのように書くべきか見当もつかないことを何ページにもわたって書きました。

鉛筆と葉っぱについては、ロボットはすでに1カ月前に出来上がっていて、どんな楽器でも完璧にプラマイゼロです。ただ、不規則な平均化の枝を追加することで改造したいんです。

 
trader781:

アルチョム それはわかりますが、この場合、私も理解されることがあります。現在のバリアントでは何も機能しないし、機能しないでしょう。この配列の必要な要素をコマンド自身が引っ張ってくる必要があること、この特殊なケース、例えば5順目のストップロスの場合、どのように書かれているのかが全く分からないことを数ページにわたって書いてきました。

この特殊な場合、例えば5次注文のストップロスなど、どう書けばいいのか全くわかりません。

そんな指令はない。自分で作らないといけないんです。すなわち、機能です。
 
Artyom Trishkin:
そのようなコマンドはありません。自分で作る必要があるのです。つまり、機能です。

OK、それなら私の理解では、(3つの異なるパラメータを探せば)正しいものを返した3つの異なるカスタム関数が得られます

アレイソート

では

右の数字でArrayBsearch

で、どう対処したらいいのか?

まさに配列から構造体要素への移行