[ARCHIVE!] フォーラムを散らかさないように、どんなルーキーの質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしではどこにも行けない - 4. - ページ 534

 
Alex007:
別スレッドで追い出されたので、似たような質問が見つからなかったので、こちらで質問してみます。

MT4でExpert Advisorを取引しています。この投稿の前までは全て順調でした。今日、EAを無効にしようと思い、ツールバーの適当なボタンを押したら、チャートにスマイリーの代わりに十字が表示されました。そして、その後に突然、案件が舞い込んだ。1、2...ますますエキスパートアドバイザーの設定を開き、該当のウィンドウでOnlyBuyを有効にしました(EAは無効のままです)。またまた取引成立!逆ザヤ解消!?その後、設定を開き直して、その取引機能を無効にする(チェックを外す)。これもうまくいきません。Expert Advisorは、自分自身の人生を歩んでいるようなものです。サポートに問い合わせたところ、 お使いのEAに問題がある可能性が高いです」という回答が返ってきました。他のEAをインストール せずに、お使いの端末を削除し、弊社サイトより新規にインストールしてください。
Expert Advisorsの皆様、今回の件、特にハイライト部分について、ご意見をお聞かせください。特に、"most likely "という明確な表現が気に入っています。 どうしてそうなるのか、何が問題なのか。
何が問題なのかは、コードを見直さないとわからない。まず、deinit()には、プログラムが終了した後に取引を開始する条件があります。そんなEAをどこから持ってきたんだ?
 
申し訳ないですが、奇跡は起きません。MTが2台開くなんて、気がつかなかった。片方はトレードで、もう片方はピースでトレードしていたんです。昔も縁起が悪いですね~、私はパソコンが得意なようで、ここにこんなものが・・・。
 
VladislavVG:

注意 - MKL4では、優先順位がC言語と若干異なるので、共通事項をお読みください。したがって、-括弧をつけるのがよいでしょう。

ありがとうございました。括弧の理由がわかりました。

ここで昔話をしましょう。自作の曲でロボットを仕上げる。うまくいくといいんですけどね。And suddenly '\end_of_program' - unbalanced left parenthesis C:\TeleTRADE⇄variantprogram.mq4 (365, 1)

いつものように、括弧に目を通しましたよ。何も見えていないようです。また、何になるのでしょうか?

int Profit=0;                                
    for (i=0; i<OrdersHistoryTotal(); i++)
   {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true)
   {
    if(OrderSymbol()!= Symbol()) continue;
    if(OrderType()>=2)continue;
    Profit+=OrderProfit();     }}
    
 
 
 if(Profit>AccountBalance()){  
   for(i=0;i<=OrdersTotal();i++){
   if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true)
 { if(OrderSymbol(!= Symbol()) continue;
   if (OrderMagicNumber() != 450) continue;
   if(OrderType()==OP_SELL) 
  OrderClose(OrderTicket(),OrderLots(),Ask,6,Red);
   if(OrderType()==OP_BUY)
  OrderClose(OrderTicket(),OrderLots(),Bid,6,Red);}}} 
//----
   return(0);
  }
//+------------------------------------------------------------------+

//------- :  Коды ошибок
string ErrorDescript(int error_code){string error_string;switch(error_code){
      //---- Коды ошибок, возвращаемые торговым сервером:
      case 0:   error_string="Нет ошибок";                               
 

うっ!! 余計な括弧が出たような気がします。

 
Dimka-novitsek:

ありがとうございます!(笑)。括弧の理由がわかりました。

...

皆さん、これが許されるのか、それとも私が何かを見落としたのか、教えてください。

if(OrderType()>=2)continue;
 
paladin80:

皆さん、これが許されるのか、それとも私が何かを見落としたのか、教えてください。


なぜかというと、それは通常のイント

もうひとつは、次のビルドでは、BUYとSELLのコードが変更され、コードが突然動作しなくなる可能性があることです。

 
ilunga:

なんでやねん、普通にint

もうひとつは、次のビルドでBUYとSELLのコードが変更され、コードが突然動作しなくなる可能性があることです。

はい、それは論理的です。そのほうがいい。

if(OrderType()=OP_BUY || OrderType()=OP_SELL) continue;
ディミーチェ、コンパイラが括弧が足りない場所を表示しても、ここがそうだとは限らないんだ。コードの 最初に括弧が正しく配置されていない(または欠けている)場合、エラーが 最後にポップアップ表示されることがあります。そのため、/* ...のコメントで探すことができます。*/.
 
paladin80:

そうですね、納得です。それなら、こっちの方がいいんじゃない?

ディミー コンパイラが括弧を見逃す場所を示したとしても、そこを見ろということにはならないんだ。コードの最初に括弧が正しく配置されていない(または欠けている)場合、エラーが最後にポップアップ表示されることがあります。そこで、コードにコメントすることで探してみてください /* ...*/.

ただ、そういうわけでもなく......。)"=" は条件ではなく、代入操作 です。

そうすると、こうなるはずです。

if(OrderType()!=OP_BUY && OrderType()!=OP_SELL) continue;

あるいはさらにこんな感じ(2回使わなくてもいいように)。

int type = OrderType(); 
if(type!=OP_BUY && type!=OP_SELL) continue;
 
ilunga:

こんなもんじゃない-)"=" は条件ではなく、代入操作です。

では、こう行ってください。

あるいはもっとこう(二度手間にならないように)。

あなたの方が良いですね、入れ忘れました!)おそらく、"&&"ではなく、"||"であるべきでしょう。
 
Dimka-novitsek:

ありがとうございました。括弧の理由がわかりました。

ここで昔話をしましょう。自作の曲でロボットを仕上げる。うまくいくといいんですけどね。And suddenly '\end_of_program' - unbalanced left parenthesis C:\TeleTRADE⇄variantprogram.mq4 (365, 1)

いつものように、ブラケットに目を通し、パッチを当てています。何も見えていないようです。また、何になるのでしょうか?


 if(Profit>AccountBalance()){  
   for(i=0;i<=OrdersTotal();i++){
   if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true)
 { if(OrderSymbol() != Symbol()) continue; // тут не хватает скобки
   if (OrderMagicNumber() != 450) continue;
   if(OrderType()==OP_SELL) 
  OrderClose(OrderTicket(),OrderLots(),Ask,6,Red);
   if(OrderType()==OP_BUY)
  OrderClose(OrderTicket(),OrderLots(),Bid,6,Red);}}} 
//----
   return(0);
  }
ほとんどのブローカーは5桁のクォートで動作するため、6ピップのスリップは十分ではありません。