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

 
hoz:


Vitaly そこがポイントです。ご覧ください。

最初にsl =0; tp =0; そして、ユーザーが入力したi_slと i_tpを もとに、すでに順番が決まっているslと tpの 正規化された値を求めます。そして、slとtpが 0に等しくないか、つまり、関数の最初に宣言した後に変更されたかをチェックし、次に、slと tpが0に等しいかどうかをチェックします。注文を変更します。

また、slとtpが 0に等しい場合は、これらのパラメータが計算 されていないことを意味します......。ということです。これらの変数の値を得れば、すぐにゼロ以外の値になり、順序を修正することができるのだが......。意味があるのでしょうか?



申し訳ありませんが、私は何かを見ていない、メガネと色はありませんが、なぜこの関数にパラメータを渡すと、同様に参照によって?もしi_sl,g_type...がグローバル変数 であれば、パラメータなしで動作し、変更する必要がある場合(変更後の変数)は、変更後の同じ関数内で行ってください。
 
rigonich:

すみません、私は何か見ていない、私はメガネや任意の色を身に着けていない、しかし、なぜ我々は、この関数にパラメータを渡す必要があり、参照によって、あまりにも?もしi_sl,g_type...がグローバル変数であれば、パラメータなしで動作し、変更する必要がある場合(変更後の変数)は、変更後の同じ関数内で行ってください。


注文はOpenBuy() 関数とOpenSell() 関数によって送られますが、OrdersModifying()関数は注文を修正 します。

つまり、例えば、Trade 関数(int signal)OpenBuy()OpenSell()の中に修正関数がある場合、OrdersModifying() 関数で得られたslや tpは いずれにしてもそこに渡されるべき ものである。これらの値は、その関数に欠けています。

 
hoz:


注文は関数OpenBuy()OpenSell()によって送信されますが、関数OrdersModifying()によって変更 されます。

つまり、例えば、修正関数がTrade 関数(int signal)OpenBuy()OpenSell() に置かれている場合、OrdersModifying() 関数で得られたslと tpの 値は、いずれにしてもそこに渡されるべき ものである。これらの値は、その関数に欠けています。


あなたの場合、 関数OpenBuy()OpenSell() std なしで注文を出し、注文が出されたら関数OrdersModifying() を使って修正 するのです。OrdersModifying() 関数を別の場所に配置し、そこにパラメータを 渡す必要は ないと思います。この関数の中で変数 slとtpを宣言するだけ です。int sl = 0, tp = 0;

すみません、intではなくdoubleです。

 
rigonich:

OpenBuy()OpenSell() 関数がslなどを使わずに注文を出し、注文が出たらOrdersModifying() 関数を使って変更 します。OrdersModifying() 関数を別の場所に配置し、そこにパラメータを 渡す必要は ないと思います。この関数の中で変数 slとtpを宣言するだけ です。int sl = 0, tp = 0;


現在、私はそのようなトレーディング機能を持っています。

bool Trade (int signal)
{
  FindOrders();

  if(signal == SIGNAL_BUY)                                                          // Если сигнал на покупку и открытых ордеров нет..
    if(!OpenBuy())                                                                  // открываем лимитный ордер на покупку
      return(false);                                                                
      
  if(signal == SIGNAL_SELL)                                                       // Если сигнал на продажу и открытых ордеров нет..
     if(!OpenSell())
       return(false);                                                              // открываем лимитный ордер на продажу
  
  if(OrderStopLoss() == 0 && OrderTakeProfit() == 0)
    OrdersModifying();                                                             // Модифицируем ордер, добавим SL и TP
    
  if(UseBU == true)
     MovingStopLossToBU();                                                         // Перевод в б.у. по достижению некоторого значения TP

  return(true);
}

モディファイが行われない。

 
hoz:


現在、私はそのようなトレーディング機能を持っています。

モディファイが行われない。


取引()機能で選択されていない注文がある。
 
rigonich:

スクリプトに何を求めているのか理解できない。


アーカイブチャートで起動すると、そのプログラムが必要です。

値動きのある部分には、動きの強さや時間など、指定されたパラメーターが視覚的に表示されます。

例えば-30分で400点の補正を行った場合。 そうして1年を通して、すべての補正をこの範囲内で行っています。

手動で目視観察することは不可能です。ディストーション(歪み)。すぐに確認できるような色分けが欲しいです。

___

調べたところ、さまざまな「Histoty」プログラムがあるようです。 しかし、それらはアカウントの履歴を可視化するだけです。

しかし、私が指定したフィルターによる価格のセグメントは見つかっていません。

 
rigonich:

取引()機能で注文が選択されていない。


そんなものがあるんですね。これが修正方法です。

bool Trade (int signal)
{
  int total = OrdersTotal() - 1;
  
  FindOrders();

  if(signal == SIGNAL_BUY)                                                          // Если сигнал на покупку и открытых ордеров нет..
    if(!OpenBuy())                                                                  // открываем лимитный ордер на покупку
      return(false);                                                                
      
  if(signal == SIGNAL_SELL)                                                       // Если сигнал на продажу и открытых ордеров нет..
     if(!OpenSell())
       return(false);                                                              // открываем лимитный ордер на продажу
       
  for(int i=total; i>=0; i--)
  {
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
    {
      if(OrderStopLoss() == 0 || OrderTakeProfit() == 0)
        OrdersModifying();                                                             // Модифицируем ордер, добавим SL и TP
    }
  }    
 // if(UseBU == true)
   //  MovingStopLossToBU();                                                         // Перевод в б.у. по достижению некоторого значения TP

  return(true);
}

そして、改造機能はこうです。

void OrdersModifying()
{
  int total = OrdersTotal() - 1;
  double sl = 0, tp = 0;
  
  for(int i=total; i>=0; i--)
  {
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == true)                            // Если ордер есть и он выбран..
    {
      if(g_type == OP_BUY)
      {
        if(i_sl != 0)                                                                 // Если входной параметр стоп-лосса не равен 0, то..
           sl = NormalizeDouble(OrderOpenPrice() - i_sl*pt,Digits);                    // Получаем значение стоп-лосса для выбранного ордера
        if(i_tp != 0)                                                                 // Если входной параметр тейкпрофита не равен 0, то..
           tp = NormalizeDouble(OrderOpenPrice() + i_tp*pt,Digits);                    // Получаем значение тейкпрофита для выбранного ордера
      }
      if(g_type == OP_SELL)
      {
        if(i_sl != 0)                                                                 // Если входной параметр стоп-лосса не равен 0, то..
           sl = NormalizeDouble(OrderOpenPrice() + i_sl*pt,Digits);                // Получаем значение стоп-лосса для выбранного ордера
        if(i_tp != 0)                                                                 // Если входной параметр тейкпрофита не равен 0, то..
           tp = NormalizeDouble(OrderOpenPrice() - i_tp*pt,Digits);                // Получаем значение тейкпрофита для выбранного ордера
      }
      if(sl != 0 || tp != 0)                                                            // Если полученные значения sl и tp не равныы 0, то..
      {
        OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,OrderOpenTime() + 86400,Lime);      // Модифицируем ордер
      }
    }
  }
}

Strange でも、また出力にストップ&テイクがないんです。

 
TUNGUS:


アーカイブチャートで起動すると、そのプログラムが必要になる

値動きのある部分には、動きの強さや時間など、指定されたパラメーターが視覚的に表示されます。

例えば-30分で400点の補正を行った場合。 そうして1年を通して、すべての補正をこの範囲内で行っています。

手動で目視観察することは不可能です。ディストーション(歪み)。すぐに確認できるような色分けが欲しいです。

___

調べたところ、さまざまな「Histoty」プログラムがあるようです。 しかし、それらはアカウントの履歴を可視化するだけです。

しかし、与えられたフィルターに従った価格のセグメントを見つけることができませんでした。


History、History_Draw - これらはテストにおけるExpert Advisorのように機能します。

与えられたパラメータによる履歴の補正を見るために、このようなものが必要です。

 

Symbol() MT4で問題が発生しました。

2つの機能で説明します。

string   SymbolOK()
{

   string   value;
   string   argument = "ANYTHING";

   if(false)
   {
      value = argument;
   }

   return(value);

}

string   SymbolPROBLEM()
{

   string   value;
   string   argument = Symbol();

   if(false)
   {
      value = argument;
   }

   return(value);

}

を実行すると、空文字列が出力されます。

int start()
{
   Comment(SymbolOK());
   return(0);
}

しかし、2番目の関数は、文字列ID "EURUSD "を出力します(まあ、チャートに依存しますが、関数のロジックによると、それは空の文字列になるはずですが、出力されます)。

int start()
{
   Comment(SymbolPROBLEM());
   return(0);
}

何が問題なのか理解するのを助けてください。ありがとうございました。

 
rigonich:

取引()機能で注文が選択されていない。

ちなみに。Trade() 関数で注文を選択する意味は何ですか?注文が選択され、そこで修正される関数 OrdersModifying() を呼び出して います。つまり、最初のバリエーションが正しかったのだ!