エラー、バグ、質問 - ページ 1917

 

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

バグ、バグ、質問

fxsaber さん 2017.06.15 10:08

なぜ、コンパイルができるのか?
class A {};

class B : public A
{
public:  
  int i;
};

void OnStart()
{
  A* a = new B;
  
  ((B*)a).i = 1;
  
  dynamic_cast<B*>(a).i = 1;
  
  delete a;
}
Support Team 2017.06.29 12:04
なぜコンパイルしてはいけないのか?

AはBの祖先なので、変換は有効である可能性があり、有効性がチェックされ、オブジェクト変換が不可能な場合は例外が投げられ、MQLプログラムは終了します。

明示的な変換とは対照的に、dynamic_castは例外を発生させず、代わりにNULLを返し、その場合、プログラムは実行を継続します。
 
Vladimir Karputov:

スピードは最大値からマイナス3段階に設定します。そうしないとインターフェースの更新が保証されません。

この速度は中間の速度で、そこが最大になるには長い道のりです
 
SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL)

SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_MAINTENANCE)
テスターではなぜかいつも0.0が返ってくる

エラーコードも 0

 
Anton Ohmat:
なぜかいつも0.0を返します

エラーコードも 0

これは、私が理解している限りでは、モスクワの取引所でしか使えないものです

 
助けてください!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!端末1090において、「1クリック取引」ボタンが表示されない。可能な限り手を尽くしました。 プロパティのチェックボックスにもチェックを入れました。ラインオープンオーダーとして表示されない!!!!どうすればいいのか?
 
vati-vv:
助けてください!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!端末1090で「Trade in 1 click」ボタンが表示されない。可能な限り手を尽くしました。 プロパティで確認もしました。オープンオーダーも線が表示されない!!!!どうすればいいのか?

現在、MQL5セクションに質問を投稿しています。旧ターミナルについては、MQL4およびMetaTrader 4の セクションに質問を投稿してください。

クイック・トレーディング・パネルは、実際に取引口座にログインしているときのみ表示されますので、取引サーバーにログインしているか どうかを確認することをお勧めします。

 

こんにちは、mql5ではfilling_modeの指定に以下の方法を使用しています。

   if(SymbolInfoInteger(Symbol(),SYMBOL_FILLING_MODE)==SYMBOL_FILLING_FOK)
     {
      tradeBuy.SetTypeFilling(ORDER_FILLING_FOK);
      tradeSell.SetTypeFilling(ORDER_FILLING_FOK);
     }

   else if(SymbolInfoInteger(Symbol(),SYMBOL_FILLING_MODE)==SYMBOL_FILLING_IOC)
     {
      tradeBuy.SetTypeFilling(ORDER_FILLING_IOC);
      tradeSell.SetTypeFilling(ORDER_FILLING_IOC);
     }

   else
     {
      tradeBuy.SetTypeFilling(ORDER_FILLING_RETURN);
      tradeSell.SetTypeFilling(ORDER_FILLING_RETURN);
     }


テスターではEAがポジションを 開きますが、約1ポジションが開かず、エラーunsupported充填モードが表示されます、何が間違っているのでしょうか?

 
Dmitry Melnichenko:

こんにちは、mql5ではfilling_modeの指定に以下の方法を使用しています。


テスターでEAがポジションを開く のですが、いくつかのポジションが開かれず、充填モードがサポートされていないというエラーが発生します。


返される値は1つではなく、1つか2つの合成値です。そのため、チェックが正しく行われないことがあります。

そんな作りを試してみてください。

//---
   if(IsFillingTypeAllowed(Symbol(),SYMBOL_FILLING_FOK))
      m_trade.SetTypeFilling(ORDER_FILLING_FOK);
   else if(IsFillingTypeAllowed(Symbol(),SYMBOL_FILLING_IOC))
      m_trade.SetTypeFilling(ORDER_FILLING_IOC);
   else
      m_trade.SetTypeFilling(ORDER_FILLING_RETURN);
...
//+------------------------------------------------------------------+ 
//| Checks if the specified filling mode is allowed                  | 
//+------------------------------------------------------------------+ 
bool IsFillingTypeAllowed(string symbol,int fill_type)
  {
//--- Obtain the value of the property that describes allowed filling modes 
   int filling=(int)SymbolInfoInteger(symbol,SYMBOL_FILLING_MODE);
//--- Return true, if mode fill_type is allowed 
   return((filling & fill_type)==fill_type);
  }


追記:もし役に立ったのであれば、教えてください。

 
Vladimir Karputov:

返される値は1つではなく、1つまたは2つの合成値であるため、無効なチェックを受ける可能性があります。

この構造を試してみてください。


追記:もし役に立ったのであれば、教えてください。


ありがとうございます。しかし、それは助けにはなりませんでした。

 

オブジェクトのウィンドウ/サブウィンドウ番号を知るにはどうしたらいいですか?一致するプロパティが見当たりません。