どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 110

 
artmedia70:
この関数のどこで、最後に決済したときのStopLossを読み取るのでしょうか?何もないんですよ。

ここにあります。ダイレクトに指す。
OrderSelect(1,SELECT_BY_POS,MODE_HISTORY);
      take=OrderTakeProfit();
       ts=take;
 
borilunad:
みんな寝ろ!朝はいつもより美味しい!夜中の1時ですよ!?おやすみなさい!そして、Artyomはもう寝坊してしまった!

あなたのやっていることを始めて5日目ですが、もう夜中に考えるようになりましたよ。おやすみなさい。
 
おっと!ログブックにエラー130が表示されました。これって、停留所が違うんじゃないですか?しかし、新しいストップロスは1.3282です。現時点でのストップロスは1.3275(これは注文の始値でも ある)、現在の気配値は1.3297です。どこが間違いなのか?
 

こんにちは。なぜ定義済みの変数「ポイント」で、最後にゼロが、ストラテジーテスターのログで定義されていないのか、丸数字なのか。

Пример:

static double lBUY;

lBUY=100*Point; //Так-же можно написать 10,20,180 или 520.

if(lBUY==0.01)

{

Alert("НУЛИ НЕ ПИШУТСЯ В КОНЦЕ Point ",lBUY);

}

 
artmedia70:
私はシベリア人です、ええ。クラスノヤルスク近郊。


シビリャク、そう、ほとんど、ザムリャク))。
 
webip:

でも、5日前からやっていることで、もう夜中に考えるようになりましたね。

夜中に考え事をしない人というのは、逆に言えば簡単なんです。私も同じ状況です。それに、夜は誰にも邪魔されないしね。ところで、以前読んだ本によると、脳は夜になるとよく考えるようになるそうです。まるで科学者が発見したような...。
 
semiromid:

こんにちは。 なぜ定義済みの変数「ポイント」で、最後にゼロが、ストラテジーテスターのログで定義されていないのか、丸数字なのか。

Пример:

static double lBUY;

lBUY=100*Point; //Так-же можно написать 10,20,180 или 520.

if(lBUY==0.01)

{

Alert("НУЛИ НЕ ПИШУТСЯ В КОНЦЕ Point ",lBUY);

}



また、Alertは実際にどのような出力をしているのでしょうか。
 
artmedia70:
DoubleToStr(number,digit) is for you


ありがとうございました。キャンドルの特性を比較するために必要だった(多い、少ないなど)それをねじ込む - それは動作します。唯一のデータ型文字列を比較する方法を理解することはできません? または文字列にダブルは、文字列に番号を 翻訳していない?:-D


PS.インジケータでは動作せず、スクリプトでのみ動作する...。High[i]を呼び出すと、小数点以下4桁までしか表示されません。

書いています。

Alert ("doubletostr High = ", DoubleToStr(High[1],5));
if (DoubleToStr(High[2],5)>(DoubleToStr(High[3],5)).
{
Alert ("More");
}.
if (DoubleToStr(High[2],5)<(DoubleToStr(High[3],5))
{
アラート("Smaller")。

}

動作は、結果を5桁で書き込み、オーバー/アンダーをカウントします。問題は、インジケータでは、文字列配列がチャートに表示されないことです。だから...

...書きます。

アラート(「正規化ダブル高値= ", NormalizeDouble(High[1],5));

うまくいきません - 結果は > 1,1234 です。

なぜ、ここまで複雑にしなければならなかったのか、開発者が理解できない。なぜ、これだけチャート上に桁数が表示されると、5桁で呼び出された関数に傷がつかないのでしょうか?もしかして、簡単な解決策があるのでは?

 

最後のマーケット ポジションが利益で決済された場合はTrueを、損失で決済されなかった場合はFalseを 返すべき関数で悩んでいます。この関数が真を 返した場合、すべてのポジション(未決済と成行の両方)が決済されます。

出てきたのはこんな感じです。

//+-------------------------------------------------------------------------------------+
//| Получаем состояние последней позиции (Открыта или закрыта)                          |
//+-------------------------------------------------------------------------------------+
bool isCloseByTakeLastOpenPos(int delta)
{
   datetime lastOrderCloseTime = 0,               // Время закрытия последнего открытого ордера
            lastOOTHist = -1;                     // Время открытия последнего открытого ордера из истории
   
   for (int i=OrdersHistoryTotal()-1; i>=0; i--)
   {
      if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderType() > 1) continue;               // Все удалённые отложки нас не интересуют..
  
      if (lastOrderCloseTime < OrderCloseTime())   // Находим время закрытия..
      {
         lastOrderCloseTime = OrderCloseTime();   // ..последней закрытой позиции в истории
         int j = i;
      }
   }
  if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY))
   {
      if (OrderProfit() + OrderCommission() + OrderSwap() <= 0) return (false);
      if (MathAbs(OrderProfit() - OrderClosePrice()) > delta * pt) return (false);
      else
      {
         lastOOTHist = OrderOpenTime();
         Comment("FUNC isCloseByTakeLastOpenPos : lastOOTHist = ", lastOOTHist);
      }
   }
   else
   {
     // Comment("FUNC isCloseByTakeLastOpenPos : не удалось выбрать ордер в истории");
      Print("FUNC isCloseByTakeLastOpenPos : не удалось выбрать ордер в истории");
      return(false);
   }
  
   for(int h=OrdersTotal()-1; h>=0; h--)
   {
      if (OrderSelect(h, SELECT_BY_POS, MODE_TRADES))
      {
         if (OrderMagicNumber() != i_magic)   continue;
         if (OrderSymbol() != Symbol())       continue;
         if (OrderType() > 1)                 continue;
         if (lastOOTHist < OrderOpenTime()) return(false);  // Выбранная рыночная позиция открыта позже закрытой по тейку
      }
      else {Print("FUNC isCloseByTakeLastOpenPos : не удалось выбрать рыночный ордер");return(false);}
   }
   
   return (true);
}

上記のArtyomは、私のバグがある場所を示唆しました。自分のために書き直したんです。まだ最終的なバリエーションではありませんが...すでにかなり明確になっていますね。Expert Advisor を実行した後、残りのポジションがクローズされておらず、全くクローズされていないことにすぐに気がつきました。何が原因なのかを掘り起こし始めたのです。いくつかの機能を推奨し、その理由がこのブロックにあることに気づきました。

 if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY))
   {
      if (OrderProfit() + OrderCommission() + OrderSwap() <= 0) return (false);
      if (MathAbs(OrderProfit() - OrderClosePrice()) > delta * pt) return (false);
      else
      {
         lastOOTHist = OrderOpenTime();
         Comment("FUNC isCloseByTakeLastOpenPos : lastOOTHist = ", lastOOTHist);
      }
   }
   else
   {
      Comment("FUNC isCloseByTakeLastOpenPos : не удалось выбрать ордер в истории");
      Print("FUNC isCloseByTakeLastOpenPos : не удалось выбрать ордер в истории");
      return(false);
   }

コメントはきっちりずっと発動しています。

Comment("FUNC isCloseByTakeLastOpenPos : не удалось выбрать ордер в истории");

私はそれをコメントアウトし、車を走らせた。このコメントで気がついたこと

Comment("FUNC isCloseByTakeLastOpenPos : lastOOTHist = ", lastOOTHist);

クローズドポジションラストがあっても、全くトリガーしない。何が問題なのでしょうか?

私の考えは、間違っているかもしれませんが・・・。もしかしたら、このブロックを置く必要があるかもしれません

 if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY))
   {
      if (OrderProfit() + OrderCommission() + OrderSwap() <= 0) return (false);
      if (MathAbs(OrderProfit() - OrderClosePrice()) > delta * pt) return (false);
      else
      {
         lastOOTHist = OrderOpenTime();
         Comment("FUNC isCloseByTakeLastOpenPos : lastOOTHist = ", lastOOTHist);
      }
   }
   else
   {
     // Comment("FUNC isCloseByTakeLastOpenPos : не удалось выбрать ордер в истории");
      Print("FUNC isCloseByTakeLastOpenPos : не удалось выбрать ордер в истории");
      return(false);
   }

for ループに入れるのですか?そうでなければ、溢れたものがどのような方向に向かうのか、誰にもわからないのです。j 変数には、その位置のインデックス番号が入りますが、どの方向に検索をかけるかは明示的に指定されていません。

 
hoz:

最後のマーケット ポジションが利益で決済された場合はTrueを、損失で決済されなかった場合はFalseを 返すべき関数で悩んでいます。この関数が真を 返した場合、すべてのポジション(未決済と成行の両方)が決済されます。

出てきたのはこんな感じです。

上記のArtyomは、私のバグがある場所を示唆しました。自分のために書き直したんです。まだ最終的なバリエーションではありませんが...すでにかなり明確になっていますね。Expert Advisor を実行した後、残りのポジションがクローズされておらず、全くクローズされていないことにすぐに気がつきました。何が原因なのかを掘り起こし始めたのです。いくつかの機能を推奨し、その理由がこのブロックにあることに気がつきました。

コメントはきっちりずっと発動しています。

私はそれをコメントアウトし、車を走らせた。このコメントで気がついたこと

クローズドポジションラストがあっても、全くトリガーしない。何が問題なのでしょうか?

私の考えは、間違っているかもしれませんが・・・。もしかしたら、このブロックを置く必要があるかもしれません

for ループに入れるのですか?そうでなければ、溢れたものがどのような方向に向かうのか、誰にもわからないのです。j 変数には、その位置のインデックス番号が入りますが、どの方向に検索をかけるかは明示的に指定されていません。

変数jは関数の最初に明示的に負の値で初期化する必要があります。試してみてください。まだそれ以上は見ていない。