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

 
MarkTrade:


効いてる...。ありがとうございました。

私のバージョンがなぜ動作したくないのか、理解できればいいのですが...。

この違いがわからないのでしょうか?比較対象を間違えていますね。

if (a && b < c) - そんなことはできません。

if (a<c && b<c) - これは動作します。

 
artmedia70:

この違いがわからないのでしょうか?比較対象を間違えていますね。

if (a && b < c) - そんなことはできません。

if (a<c && b<c) - できる。



いや、その違いに気づいたんです。ただ、if (a && b < c) は可能だと信じていたので...。 :-)

今わかった!ありがとうございます。

 
MarkTrade:


いや、その違いに気づいたんです。ただ、if (a && b < c) は可能だと信じていたので...。:-)

これでわかる!ありがとうございます。

たぶん、if(a+b < c)のことですね?それなら、そんな風にすればいいんだ!」と。
 
skyjet:


いつもありがとうございます。現在、「チェック可能な」バーの数を最適化しようとしましたが、ウィンドウの結果はそこではありません。最初から、そして最後からも数えようとしたが、無駄だった。

extern int number=3;
//------------------------------------+
for (int x=number; x>1; x--) // x>1 (а не x>=1)
{
if(Open[x]==Open[x-1]) continue;
if(Open[x]<Open[x-1])
   {
    //--- action 1
   }
else
   {
    //--- action 2
   }
}

ウィンドウに結果が表示されない」とはどういう意味ですか?もしかしたら、ウィンドウに表示される結果が間違っていて、プログラムの別の場所でエラーが発生しているのかもしれませんね?

 

フェローの皆さんへフィボレベルを含むテクニカル分析に基づくプログラミングラインについて、文献(教科書)があればご教示ください。プログラムコードの例で「ダミーのための」望ましいです。

または、オープンソースコードで同様のアドバイザーを提案できる方。

事前に感謝しています。

 
alexey1979621:

親愛なる同志たちへフィボレベルを含むテクニカル分析に基づくプログラミングラインについて、文献(教科書)があればご教示ください。できれば、「ダミーのための」コード例付きで。

使い方がわからない。

とても感謝しています。

この教科書の 何が問題なのか?必要なものは何でも、勉強、練習、頑張ってください
 
artmedia70:
注文データを "充填 "した直後の配列の中身を理解し、見ることができますか?いいえ、あなたは知らない、仮定するだけです。配列のすべてのセルの内容を、pr()ではなく、標準のPrint()でSPRINTして、テスターログを見て、配列が満たされた直後に、すべてのセルに、何があるのかを確認してみてください。配列の内容が自分の考えと一致していることが確認できたら、pr()でそれを表示します。同じ結果が得られない場合 - それはあなたのpr()です、もしデータが一致するなら、次のステップでエラーを探します。

アレイがプリントされましたが、今のところ、アレイは関係ないですね。以下、私が思うところを述べる。

ちなみに。すべての出力を標準プリントに切り替えた。状況は同じです。4つのポジションが+でクローズする瞬間がある。そして、論理的にはisCloseByTakeLastOpenPos() 関数が動作するはずですが、私は最初からこのように呼び出しています。

 for (int ord=OrdersTotal()-1; ord>=0; ord--)
   {
      if (!OrderSelect(ord,SELECT_BY_POS)) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderType() == 6) continue;
        
      g_ticket = OrderTicket();
      g_type = OrderType();
              
      // Блок модификации ордеров       
      if (i_sl != 0 || i_tp != 0)
      {
         if (OrderStopLoss() == 0 && OrderTakeProfit() == 0)
         {
            OrdersModifyer(g_ticket);
         }
      }
      // Закрытие всех ордеров, если последний ордер закрыт
      if (isCloseByTakeLastOpenPos(2))        // Наша функция, определяющая.. закрылся ли последний закрытый ордер в + или нет.
      {
         // if (g_type < 2)
          {
              ClosePosBySortLots();
          }
          //else
          if (g_type > 1 && g_type < 6)
          {
              DeletePendingOrders(g_ticket);
          }
      }
   }

これは、最後に決済された注文が、利食いまたは利益確定で決済されたことを教えてくれるものです。以下はその機能です。

//+-------------------------------------------------------------------------------------+
//| Получаем состояние последней позиции (Открыта или закрыта)                          |
//+-------------------------------------------------------------------------------------+
bool isCloseByTakeLastOpenPos(int delta)
{
   datetime lastOrderCloseTime = -1,               // Время закрытия последнего открытого ордера
            lastOOTHist = -1;                     // Время открытия последнего открытого ордера из истории
   int j = -1;
   Print ("isCloseByTakeLastOpenPos: вошли в функцию");
   
   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;               // Все удалённые отложки нас не интересуют..
      Print ("isCloseByTakeLastOpenPos: первоначальные условия выполнены!");

      if (lastOrderCloseTime < OrderCloseTime())   // Находим время закрытия..
      {
         lastOrderCloseTime = OrderCloseTime();   // ..последней закрытой позиции в истории
         j = i;
         Print ("j = " + j + "   " + TimeToStr(TimeCurrent()));
      }
   }
  if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY))
   {
      if (OrderProfit() + OrderCommission() + OrderSwap() <= 0) return (false);
//      pr ("OTP() = " + OrderTakeProfit() + "; OCP() " + OrderClosePrice() + "   " + TimeToStr(TimeCurrent()));
  //    pr ("OOP() = " + OrderOpenPrice() + "; OCP() " + OrderClosePrice() + "   " + TimeToStr(TimeCurrent()));
      if (MathAbs(OrderTakeProfit() - OrderClosePrice()) > delta * pt) return (false);
      else
      {
         lastOOTHist = OrderOpenTime();
         Comment("\n", "FUNC isCloseByTakeLastOpenPos: ",
                 "\n", "j = ", j,
                 "\n", "lastOOTHist = ", TimeToStr(lastOOTHist, TIME_SECONDS));
      }
   }
   else
   {
      Comment("\n", "FUNC isCloseByTakeLastOpenPos: ",
              "\n", "j = ", j,
              "\n", "не удалось выбрать ордер в истории");
      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);}
   }
   Print ("isCloseByTakeLastOpenPos: последняя закрытая позиция профитна!");
   
   return (true);
}

この状況は興味深い。すべてがうまくいく。そして、ここに状況が現れます。

4つのポジションが利益確定で決済されたことがわかります。 武井によって閉じられたのだ。つまり、注文をクローズする関数がまったく機能しなかったのです。理由は、終了条件がうまくいかなかったからだと思われます。これは

 if (isCloseByTakeLastOpenPos(2))

この関数を見て、すべてを印刷すると、その瞬間に真になったわけではないことが明らかになる。どうしてですか?結局、一番外側の4オーダーは+で締めました。上に関数のコードを示しました。以下は、同じ瞬間のログの内容です。

2013.09.09 00:13:23 2013.08.15 12:35 Perevorot EURUSD.GI,M5: OpenPendingSell(): Ордер послать не удалось 0

2013.09.09 00:13:23 2013.08.15 12:35 Perevorot EURUSD.GI,M5: OpenPendingSell(): Ордер послать не удалось 0

2013.09.09 00:13:23 2013.08.15 12:35 Perevorot EURUSD.GI,M5: OpenPendingSell(): Ордер послать не удалось 0

2013.09.09 00:13:23 2013.08.15 12:35 Perevorot EURUSD.GI,M5: OpenPendingSell(): Ордер послать не удалось 0

2013.09.09 00:13:23 2013.08.15 12:35 Perevorot EURUSD.GI,M5: OpenPendingSell(): Ордер послать не удалось 0

2013.09.09 00:13:04 2013.08.15 12:30 Tester: take profit #104 at 1.32731 (1.32722 / 1.32724)

2013.09.09 00:13:04 2013.08.15 12:30 Tester: take profit #102 at 1.32731 (1.32722 / 1.32724)

2013.09.09 00:13:04 2013.08.15 12:30 Tester: take profit #100 at 1.32731 (1.32722 / 1.32724)

2013.09.09 00:13:04 2013.08.15 12:30 Tester: take profit #98 at 1.32731 (1.32722 / 1.32724)

2013.09.09 00:13:03 2013.08.15 12:30 Tester: order #104, sell 0.93 EURUSD.GI is opened at 1.32831

2013.09.09 00:13:03 2013.08.15 12:30 Perevorot EURUSD.GI,M5: isCloseByTakeLastOpenPos: первоначальные условия выполнены!

2013.09.09 00:13:03 2013.08.15 12:30 Perevorot EURUSD.GI,M5: isCloseByTakeLastOpenPos: первоначальные условия выполнены!

2013.09.09 00:13:03 2013.08.15 12:30 Perevorot EURUSD.GI,M5: isCloseByTakeLastOpenPos: первоначальные условия выполнены!

2013.09.09 00:13:03 2013.08.15 12:30 Perevorot EURUSD.GI,M5: isCloseByTakeLastOpenPos: первоначальные условия выполнены!

2013.09.09 00:13:03 2013.08.15 12:30 Perevorot EURUSD.GI,M5: j = 74 2013.08.15 12:30

2013.09.09 00:13:03 2013.08.15 12:30 Perevorot EURUSD.GI,M5: isCloseByTakeLastOpenPos: первоначальные условия выполнены!

2013.09.09 00:13:03 2013.08.15 12:30 Perevorot EURUSD.GI,M5: isCloseByTakeLastOpenPos: вошли в функцию

2013.09.09 00:13:03 2013.08.15 12:30 Perevorot EURUSD.GI,M5: isCloseByTakeLastOpenPos: первоначальные условия выполнены!

2013.09.09 00:13:03 2013.08.15 12:30 Perevorot EURUSD.GI,M5: isCloseByTakeLastOpenPos: первоначальные условия выполнены!


この条件がうまくいっていないことがわかる。ここで何が問題なのか?

 
チャート全体のスプレッドを検出するインジケーターがあるのか、あるいはそれが可能なのか、教えてください。 端末を接続した瞬間から電源を入れたときのスプレッドを記録するインジケーターしか見つけられませんでした。
 
paladin80:

結果ウィンドウが空っぽになっただけ」とはどういうことですか?もしかしたら、ウィンドウに表示される結果が間違っていて、プログラムの別の場所でエラーが発生しているのかもしれませんね?


しかし、3,2,1本のバーを比較している、つまりx>=1では計算が阻害されるのでは?

また、同じ価格のバーは単に考慮されない、番号が割り振られないということでしょうか?

最適化パラメータを設定することで、開始1、ステップ1、終了4となり、H1とH4では結果タブは単に空になり、D1では同じ収益性を異なる数のバーで分析しました。

if(Open[x]==Open[x-1]) continue;
 

プロフェッショナルは、あなたがいないとどこにも行けないんです。

機能を支援します。履歴にある最後の負け注文の数をプラス注文にカウントするもの。

例)履歴では、最後の注文がマイナスで3回、その後プラスで1回、マイナスで2回と表示される。

この関数は、最後の3つ(正順の前)を数える必要があります。