初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 33

 

こんばんは!(^o^)この機能は、私が望んでいたものを正確に、いや、ほとんど再現してくれることでしょう。しかし、マシンはコンパイルできず、次のように悪態をつきます。

'}'- not all control paths return a value htghtgfhthf.mq5 61 10 It's telling her I have something wrong with logic, not all returns are specified there.これは、私がロジックに何か問題があると言っています。はい、そうです。逆に、ifの各オピレータの後に置くと、プログラムがすぐに間違った結果を出してしまい、ナンセンスになる。短くて要領がいいんです。できることなら、どうすれば受け入れさせることができるのか。

string OrderType() { 
 string Si="";

 long lo;
 bool Bull=false; 
 Bull =PositionGetInteger(POSITION_TYPE,lo);
 if ( Bull ) {
 if ( lo==POSITION_TYPE_BUY) Si="OP_BUY";
 if ( lo==POSITION_TYPE_SELL) Si="OP_SELL";
 return (Si); }


 // ENUM_ORDER_TYPE ORType;

 Bull =OrderGetInteger(ORDER_TYPE,lo);
 if ( Bull ) {
 if ( lo==ORDER_TYPE_BUY_LIMIT) Si="OP_BUY_LIMIT";
 if ( lo==ORDER_TYPE_SELL_LIMIT) Si="OP_SELL_LIMIT";
 if ( lo==ORDER_TYPE_BUY_STOP) Si="OP_BUY_STOP";
 if ( lo==ORDER_TYPE_SELL_STOP) Si="OP_SELL_STOP";
 return (Si); }

 }
 
Dimka-novitsek:

こんばんは!(^o^)この機能は、私が望んでいたものを正確に、いや、ほとんど再現してくれることでしょう。しかし、マシンはコンパイルできず、次のように悪態をつきます。

'}'- not all control paths return a value htghtgfhthf.mq5 61 10 ロジックがおかしいと言われた、全てのリターンがそこに指定されているわけではありません。はい、そうです。逆に、ifの各オピレータの後に置くと、プログラムがすぐに間違った結果を出してしまい、ナンセンスになる。短くて要領がいいんです。できるのであれば、どうすれば受け入れられるのか?

一言アドバイス:専門的な英語を勉強してください。コードを拝見させてください。

件名については、関数は文字列型の値を返す必要があります。関数内部ではif文を使っており、return文 が含まれています。 Question: if文がBull == falseと検出した場合、関数は何を返すべきでしょうか?

 
もちろん、Si=""!空の値です。
 

アハッ!!!ありがとうございます!!!

ありがとうございます!!!!

 
Dimka-novitsek:

こんばんは!(^o^)この機能は、私が望んでいたものを正確に、いや、ほとんど再現してくれることでしょう。しかし、マシンはコンパイルできず、次のように悪態をつきます。

'}'- not all control paths return a value htghtgfhthf.mq5 61 10 ロジックがおかしいと言われた、全てのリターンがそこに指定されているわけではありません。はい、そうです。逆に、ifの各オピレータの後に置くと、プログラムがすぐに不正な結果を出してしまうというナンセンスなことになる。短くて要領がいいんです。もし可能なら、どうすれば受け入れてもらえるのか。

すべてのコントロールパスが値を返すわけではない - 値の返送を完全に制御することはできない。

型がvoidと異なるため戻り値を持たなければならない文字列 OrderType()において、戻り値による出力が保証されていないことを意味します。

演算子の戻り 値を2つも設定していますが、いずれもif条件で保護されています。両方の条件が偽の場合、どうなるのでしょうか?

そうすれば、機械は自由に窓から飛び出すことができる。

ところで、この関数では、switchと同じ働きをするifの束の代わりに、switchカウンタを使うのがより理にかなっています。

ZZZY さらに、忘れてはならないのは、ポジションをあらかじめ選んでおくことと、オーダーを決めておくことです。また、列挙型を文字列に変換する標準関数EnumToStringがあるので、車輪の再発明は必要ない。

 
ありがとうございます!
 
//+------------------------------------------------------------------+
//|                                                  Sample_Tick.mq5 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"

int Tick_All;

MqlTick           last_tick;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   Tick_All=0;

//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(!SymbolInfoTick(_Symbol,last_tick))
     {
      Print("Failed to get Symbol info!");
     }

   Tick_All++;
   Print(Tick_All,"   ",last_tick.bid,"   ",last_tick.ask,"  ",last_tick.last," ",last_tick.volume);
  }
//+------------------------------------------------------------------+


価格が変化しないのにOnTickが呼ばれるのは理解できないのですが?

2012.09.10 11:52:11 Sample_Tick (EURUSD,M5) 493 1.2787 1.2789 1.2788 300000
2012.09.10 11:52:10 Sample_Tick (EURUSD,M5) 492 1.2787 1.2789 1.2788 300000
2012.09.10 11:52:09 Sample_Tick (EURUSD,M5) 491 1.2787 1.2789 1.2788 300000
2012.09.10 11:52:07 Sample_Tick (EURUSD,M5) 490 1.2787 1.2789 1.2788 300000

 
dentraf:

価格が変化していないにもかかわらず、OnTickがトリガーされる理由がわからないのですが?

2012.09.10 11:52:11 Sample_Tick (EURUSD,M5) 493 1.2787 1.2789 1.2788 300000
2012.09.10 11:52:10 Sample_Tick (EURUSD,M5) 492 1.2787 1.2789 1.2788 300000
2012.09.10 11:52:09 Sample_Tick (EURUSD,M5) 491 1.2787 1.2789 1.2788 300000
2012.09.10 11:52:07 Sample_Tick (EURUSD,M5) 490 1.2787 1.2789 1.2788 300000

最終価格更新時刻も変わらないのでしょうか?
 
Yedelkin:
最後の価格更新の時刻も変わらないのですか?

2012.09.10 15:37:20 Sample_Tick (EURUSD.m,M5) 20 1.27841 1.27852 1.27841 2000000 2012.09.10 14:37:19
2012.09.10 15:37:20 Sample_Tick (EURUSD.m,M5) 19 1.27841 1.27852 1.27841 2000000 2012.09.10 14:37:19
2012.09.10 15:37:20 Sample_Tick (EURUSD.m,M5) 18 1.27841 1.27852 1.27841 2000000 2012.09.10 14:37:18

または

2012.09.10 15:37:12 Sample_Tick (EURUSD.m,M5) 6 1.27835 1.27845 1.27835 1000000 2012.09.10 14:37:11
2012.09.10 15:37:12 Sample_Tick (EURUSD.m,M5) 5 1.27835 1.27845 1.27835 1000000 2012.09.10 14:37:11
2012.09.10 15:37:12 Sample_Tick (EURUSD.m,M5) 4 1.27835 1.27845 1.27835 1000000 2012.09.10 14:37:10

 
dentraf:

2012.09.10 15:37:20 Sample_Tick (EURUSD.m,M5) 20 1.27841 1.27852 1.27841 2000000 2012.09.10 14:37:19

価格変更時刻はGMT+3だと思います。誰のサーバーですか?
理由: