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

 

利益を読むとエラーになる(もう何か勘違いしているのか)。

EAの中にも機能があります。

bool Fn_profit_summ(double &profit_summ, bool is_buy, ulong magic, bool prnt=false){
   profit_summ = 0;
   string str=(is_buy?"B":"S")+" -> "; 
   //-----------------------------             
   int total = PositionsTotal();          
   for(int i=total-1; i>=0; i--){
      const ulong tic= PositionGetTicket(i); if(tic<=0)     return(false); //--- asinchr
      if(!PositionSelectByTicket(tic)                   )   return(false); //--- asinchr 
      bool is_buy_ = (PositionGetInteger(POSITION_TYPE  )==POSITION_TYPE_BUY); 
      if( is_buy_                             !=  is_buy)   continue; 
      if( PositionGetInteger(POSITION_MAGIC ) !=  magic )   continue;
      if( PositionGetSymbol (POSITION_SYMBOL) != _Symbol)   continue;
      profit_summ += PositionGetDouble(POSITION_PROFIT)+PositionGetDouble(POSITION_SWAP);
      str+=IntegerToString(tic)+" - "+DoubleToString((PositionGetDouble(POSITION_PROFIT)+PositionGetDouble(POSITION_SWAP)), 2)+"/";
      }
   //-----------------------------
   if( prnt) Print(str+" --> "+DoubleToString(profit_summ, 2));
   return(true);}

ログを見るとわかるのですが

2018.02.21 01:44:04.315 2018.02.14 04:59:49   S -> 273 - -5.62/ --> -5.62

それはそれでいいのですが、売り注文ではなく、買い注文の利益となります

チケットはまさに売り注文のもの(273、ログ通り)


関数で確認し、同じ型は正しく考慮したつもりですが、本当に利益が違うのですね。もしそれが本当なら、それは黙示録です - クライアントは、指定された利益/損失に達したときに売りと買いのポジションを別々に閉じ、それは常に買いの利益を取るため、売りを閉じます。同じように預金が知らず知らずのうちに流出する可能性があります

(もし私がオーバーワークで、すでに想像していることであれば、訂正してください。このような致命的なバグがないことを切に願います)

 
Galina Bobro:

利益を読むとエラーになる(もう何か勘違いしているのか)。

EAの中にも機能があります。

ログを見るとわかるのですが

それはそれでいいのですが、売り注文ではなく、買い注文の利益となります

チケットはまさに売り注文のもの(273、ログ通り)


関数で確認し、同じ型は正しく考慮したつもりですが、本当に利益が違うのですね。もしそれが本当なら、それは黙示録です - クライアントは、指定された利益/損失に達したときに売りと買いのポジションを別々に閉じ、それは常に買いの利益を取るため、売りを閉じます。同じように預金が知らず知らずのうちに流出する可能性があります

(もし私がオーバーワークで、すでに想像していることであれば、訂正してください。このような致命的なバグがないことを切に願います)

string str=(! is_buy?"B":"S")+" -> ";
 
Kirill Belousov:
これはどういうことですか?なぜ「if bye withdraw S」が欲しいのか?
 

カスタムキャラクターを 扱うことが多いですね。例えば、この中の一つでデバッグを行いたいのですが。そのためには、ここにその名前を入力する必要があります。


しかし、カスタム文字(に限らず)の名前は長い/複雑な場合があり、キーボードから入力するのは大変です。シンボルの名前をバッファにコピーする仕組みは、どこにもありません。そこで、このメニューに「シンボル名のコピー」という項目を追加することを提案します。


ZZY テスタービジュアライザーにミリ秒を追加してください。

 
fxsaber:

ZS テスタービジュアライザーにミリ秒を追加してください。

追加

 

実行中のエラー

struct A {
template<typename T>
        void Print(   T t ) { ::Print( 2 ); }
        ~A() { Print( 1 ); }
};
void OnStart() { A a; }

結果:1

期待値:2

 
A100:

期待値:void A::Print<int>(int):1

これは、通常のプリントの狡猾さによるものと思われます。また、同じようにiCustomをオーバーロードすることもできます。同じ結果が得られると思います。

Print、Comment、Alert、iCustom、...の名前空間です。- 何か特別なものがあるようだ。

 
fxsaber:

それは、インハウスプリントの難しさに起因しています。

関係ありません。

void Print2( int )           { Print( 1 ); }
struct A {
template<typename T>
        void Print2(   T t ) { Print( 2 ); }
        ~A() { Print2( 1 ); }
};
void OnStart() { A a; }

同じ結果です。

 

カスタムシンボルの SymbolInfoTickは、Historyにティックがある場合でも(CustomTicksAddが行われていない場合)空のティックを生成します。

Terminal側では、CustomTicksReplaceの後、Historyの最後のティック(またはその時間)をSymbolInfoTickにすることを提案します。


このアクションは論理的に端末とユーザーのどちらに掛かるべきなのか、開発者にアドバイスをお願いします。

ターミナルは、ユーザが自分のコードに時々発生するバグから解放されるからです(1つ捕まりました)。

さて、例えば最近、あるシンボルがこんな風に発見されることがあります。

  ulong GetOriginalLastTime( void ) const
  {
    MqlTick Tick[1] = {0};

    ::SymbolInfoTick(this.Symb, Tick[0]);
    
    if (!Tick[0].time_msc)
      ::CopyTicks(this.Symb, Tick, COPY_TICKS_ALL, 0, 1);

    return(Tick[0].time_msc);
  }
 
A100:

関係ありません。

結果は同じ

はい、バグです。私はいつもメソッドのせいにしているので、遭遇したことはありません。