エキスパート: Diff_TF_MA_EA - ページ 3

 
Rashid Umarov:
コードが更新された。

どうやら、このような書き方をするのは、ある種の流儀のようだ

   int total=PositionsTotal();
   for(int i=total-1; i>=0; i--)
     {
      ulong ticket=PositionGetTicket(i);
      if(ticket==0) continue;
      if(PositionGetInteger(POSITION_MAGIC)!=InpMagic)   continue;
      if(PositionGetString(POSITION_SYMBOL)!=symb)       continue;
      ENUM_POSITION_TYPE type=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);
      double volume=PositionGetDouble(POSITION_VOLUME);
      if(type==POSITION_TYPE_BUY)
        {
         list_tickets_buy.Add(ticket);
         total_volume_buy+=volume;
        }
      else if(type==POSITION_TYPE_SELL)
        {
         list_tickets_sell.Add(ticket);
         total_volume_sell+=volume;
        }
     }
なぜこう書かない?
  for(int i=PositionsTotal()-1; i>=0; i--)
    if (PositionGetTicket(i) &&
        (PositionGetInteger(POSITION_MAGIC)==InpMagic) &&
        (PositionGetString(POSITION_SYMBOL)==symb))  
    {
      double volume=PositionGetDouble(POSITION_VOLUME);
      if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
        {
         list_tickets_buy.Add(ticket);
         total_volume_buy+=volume;
        }
      else
        {
         list_tickets_sell.Add(ticket);
         total_volume_sell+=volume;
        }
    }


ZY

CorrectStopLoss(POSITION_TYPE_BUY,InpStopLoss)
 
fxsaber:

どうやら、そう書くのがある種の流儀のようだ。

なぜこう書かないのか?
ベースにコードが必要なのは、論理的な推理や何百倍もの入れ子のためではなく、初心者が理解するためだからだろうか?
 
fxsaber:
...

ZY

CorrectStopLoss(POSITION_TYPE_BUY,InpStopLoss)

何が違うんだ?コードを見ていないのですが、そのようなタイプミスがあるのでしょうか、それともそれが質問なのでしょうか?

 
Artyom Trishkin:
コードがベースに必要なのは、論理的な推理や何百倍もの入れ子のためではなく、初心者が理解するためだからではないだろうか?

反転はどこにあるのか?あるポジションが条件を満たせば、それを扱う。continue - 出力。

 
Artyom Trishkin:

違いはありますか?コードを見ていないのですが、そのようなタイプミスがあるのでしょうか、それともそれが質問なのでしょうか?

//+------------------------------------------------------------------+
//| StopLevelに対する正しいStopLossを返します。
//+------------------------------------------------------------------+
double CorrectStopLoss(const ENUM_POSITION_TYPE position_type,const int stop_loss)
  {
   if(stop_loss==0) return 0;
   double pt = _Point;
   double price=(position_type==POSITION_TYPE_BUY ? SymbolInfoDouble(_Symbol,SYMBOL_ASK) : SymbolInfoDouble(_Symbol,SYMBOL_BID));
   int lv=StopLevel();
   return(NormalizeDouble((position_type==POSITION_TYPE_BUY) ? fmin(price-lv*pt,price-stop_loss*pt)
                                                             : fmax(price+lv*pt,price+stop_loss*pt),_Digits));
  }     
 
fxsaber:

ひねりはどこに?あるポジションが条件を満たせば、私たちはそれで仕事をする。陽動作戦だ

ああ...誰かの好みなんですね。

例えば、イゴール・キムのコードにはそのような入れ子がある。そのようなコードは、よりコンパクトに書くことができる(簡潔さに執着するあなたが、コードをきれいにしてより図解的にすることで簡単に回避できるコードブロックの複数の入れ子を提案するのは奇妙だ):

あなたはこのようなロジックを提案している:

  • 条件1をチェックする。
    • 条件2をチェックする。
      • 条件3をチェックする。
        • 条件4をチェックする。
          • 仕事
        • 条件4チェックブロック終了
      • 条件3チェックブロック終了
    • 条件チェックブロック2終了
  • 条件1チェックブロック終了

あるいは、このようにすることもできる:

  • 条件1が合わない-不要
  • 条件2が合わない - 必要なし
  • 条件3が合わない-不要
  • 条件4が合わない - 必要ない
  • 条件4が合わない - 必要ない。

2番目のコードはより明確で短い

 

fxsaber:

//+------------------------------------------------------------------+
//| StopLevelに対する正しいStopLossを返します。
//+------------------------------------------------------------------+
double CorrectStopLoss(const ENUM_POSITION_TYPE position_type,const int stop_loss)
  {
   if(stop_loss==0) return 0;
   double pt = _Point;
   double price=(position_type==POSITION_TYPE_BUY ? SymbolInfoDouble(_Symbol,SYMBOL_ASK) : SymbolInfoDouble(_Symbol,SYMBOL_BID));
   int lv=StopLevel();
   return(NormalizeDouble((position_type==POSITION_TYPE_BUY) ? fmin(price-lv*pt,price-stop_loss*pt)
                                                             : fmax(price+lv*pt,price+stop_loss*pt),_Digits));
  }     

どうしたんですか?以前のような質問がないように修正したのでしょう。

しかし、今、誰かがExpert Advisorをペンディング注文で動作するように変更しようとすると、入力列挙でエラーが発生するため、前後に変更する必要があります。

そして、ORDER_TYPE_BUY == POSITION_TYPE_BUYとORDER_TYPE_SELL ==POSITION_TYPE_SELLは 0と1です。つまり、違いはない。しかし、ENUM_ORDER_TYPEを入力することで、他のタイプの注文の修正が容易になります。

 
Artyom Trishkin:

ああ。それは誰かの好みだよ。

例えば、イゴール・キムのコードにはそのような入れ子がある。そのようなコードは、よりコンパクトに書くことができる(簡潔さに執着するあなたが、コードをすっきりさせ、より図解的なものにすることで簡単に避けられるコードブロックの複数の入れ子を提案するのは奇妙なことだ):

あなたはこのような論理を提案している:

  • 条件1をチェックする。
    • 条件2をチェックする。
      • 条件3をチェック、適合
        • 条件4をチェックする。
          • 作業中
        • 条件4チェックブロック終了
      • 条件3チェックブロック終了
    • 条件チェックブロック2終了
  • 条件チェックブロック1終了

こんなものは見せていなかった。当時は厳密な指示がなかったため、キムはそうせざるを得なかった。

彼はこんな選択肢を提案した:

こうすればいい:

  • 条件1が合わない-必要ない
  • 条件2が合わない-必要ない
  • 条件3が合わない-必要ない
  • 条件4が合わない - 必要ない
  • 条件4が合わない - 必要ない。

2番目のコードはより明確で短い

 
fxsaber:

そんなものは見せていない。当時は指示がなかったから、キムはそうせざるを得なかった。

それが彼の提案だ

これは?

取引、自動取引システム、取引戦略のテストに関するフォーラム。

エキスパートアドバイザー:Diff_TF_MA_EA

fxsaber, 2018.02.02 09:36.

反転はどこ?ポジションが条件を満たしている場合、それに取り組みます。もしポジションが条件を満たしていれば、それに取り組む。


 
fxsaber:

そんなものは見せていない。当時は指示がなかったから、キムはそうせざるを得なかった。


不思議なもので、当時、私はどうやって厳しくなく継続的に仕事をすることができたのだろう?私だけではなく、当時はヴィーチャ・ニコラエフ(ヴィニン)からもそうするように言われていた。

だから、このコードとそれを書いたプログラマーに対するあなたの不満が理解できない。