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

 
hoz:

昨日の質問を繰り返させていただきます。別スレッドに投稿するのはやめてほしい。不明な点があれば、すべてお答えします。

必要なポジションを閉じるのにまだ苦労しています。状況は次のとおりです。

1.ポジションの閉鎖を追跡している。

2.最後のポジションがテイクラインでクローズすると同時に......すべてのオープンポジションとペンディングポジションを一度にクローズする必要があります。すべてロットごとに、つまり大きなロットを一度に、そして小さなロットを順に並べて閉じています。これは、あくまでオーダーの経験を積むためのものです。

実装は以下の通りです。

tick毎にstart() で。

保留中の注文は必要に応じて削除されるので、成行注文を閉じることに関心があります。以下はその内容です。

なぜか一部の注文が締め切られない。私はいくつかのセグメントを見たときに印刷すると、私は何も理解していない。以下はその一例です。

コメントでは、lastOOTHist = 01:30:00となって いますが、これは実際には正しくありません。結果ウィンドウでlastOOTHistを確認すると、次のようになります。

閉店時間が違うのですが...。

ここで何が問題なのか?

ごっちゃになってる...。

をご覧ください。

for(i=0; i<p; i++)
      {
         if (OrderSelect(a[i][1], SELECT_BY_TICKET, MODE_TRADES)) // выделенное красным лишнее, тут pool не имеет значения
         {
             if (OrderCloseTime() == 0) ClosePosBySelect();
         }
      }

ループの前にある配列のすべてのセルの値をアンプリントしてください - もしかしたら、そこに犬がいるかもしれません。

 
Forexman77:
取引開始時のスプレッドを調べる方法、もっと言えばログに表示させる方法を教えてください。

取引開始直後

ticket=OrderSend(......);
if(ticket>=0)Print("ticket #",ticket," Spread=",doubleToStr(Ask-Bid,Digits)); 
あなたのスプレッドはログに残っています。
 
Sepulca:

取引開始直後。

あなたのスプレッドはログに残っています。



ありがとうございました。EAを作りました、テスターでは儲かります、デモではもっとひどいです。おそらく、リアルではもっとひどいことになるのでしょう。見開きと実物の差は特に感じません。

スプレッドを目視していたときは、3pips以上は表示されませんでした。私の考えでは、強い動きの時は全く表示されないか、広がってしまうので、それに気づく時間がないのだと思います。

アルパリはスプレッドが低いですが、強い動きの時は大きく広がるのでしょうね。DucasCopiでは、スプレッドはさらに小さくなりますが、手数料が大きく、数百万円の口座であれば、さらに小さくなります。

1分間に50pips以上の動きがある中で、スプレッドサイズについて 何か調査をされたのでしょうか?これらの動きによって、平均スプレッドはどの程度の値まで拡大するのでしょうか。

アルパリに聞いても教えてくれない。

 
FAQ:


関数に変数(配列)を値で渡すと、関数内部でローカル変数が生成され、myFunct(int my_var)のようにヘッダーで宣言します。こうすることで、この変数の変化を関数の外から見ることができなくなる。また、配列の場合、コンパイラはこのことを念押ししてくる。

変数の値の変化を外から(関数の外から)見たい場合は、変数を参照で渡します : myFunct(int& my_var)


でも、そうなんです。結局のところ、配列はグローバルに 宣言されているのです。 しかし、関数内部の変化は局所的な ものです。そのため、微細構造としての機能が存在するのです。ミクロの問題をローカルに実現するために。
[Deleted]  

グッドプロフィット・トゥ・オールOrderOpenPrice()が小数点以下5桁の価格を返すようにするにはどうしたらよいか教えてください。端末が4桁を返しても、5桁なら5桁目を四捨五入して4桁を返します。

 
ivan180976:

グッドプロフィット・トゥ・オールOrderOpenPrice()が小数点以下5桁の価格を返すようにするにはどうしたらよいか教えてください。端末が4桁を返しても、5桁なら5桁目を四捨五入して4桁を返します。


DoubleToStr(数値、精度)
 

フォレックスマン77
フォレックスマン77



ありがとうございました。EAを作ったらテスターで儲かる、デモではもっと酷い。おそらく、リアルではもっとひどいことになるのでしょう。ビジュアルは3回ほど見ています。

スプレッドを目視していたときは、3pips以上は表示されませんでした。私の考えでは、強い動きの時は全く表示されないか、広がってしまうので、それに気づく時間がないのだと思います。

アルパリはスプレッドが低いですが、強い動きの時は大きく広がるのでしょうね。DukasCopiでは、スプレッドはさらに低いですが、手数料が大きく、数百万円の口座であれば、小さくなります。

1分間に50pips以上の動きがある中で、スプレッドサイズについて何か調査をされたのでしょうか?これらの動きによって、平均スプレッドはどの程度の値まで拡大するのでしょうか。

アルパリに聞いても教えてくれない。


ちなみに私は、ちょうど金曜日にアルパリでスプレッドの分析をしていたんです。

細い黄色いのは、バーごとの最大スプレッド(私は1分を使っています)を表しています。太字の赤色 - バーあたりの最小スプレッド。ご覧の通り、日中のスプレッドは5桁で5~14ピップスです。しかし、21時以降のサーバータイムのスプレッドは10ポイントを下回ることはなく、一日の終わりには52ポイントまで上昇するのが一般的である。価格急変の前に、スプレッドが急上昇する面白い瞬間を捉えました。

 
artmedia70:

積み重ねがあるから・・・。

を、すぐそこに。

for(i=0; i<p; i++)
      {
         if (OrderSelect(a[i][1], SELECT_BY_TICKET, MODE_TRADES)) // выделенное красным лишнее, тут pool не имеет значения
         {
             if (OrderCloseTime() == 0) ClosePosBySelect();
         }
      }

それはあくまで参考までに。書いているときはともかく、そうでないときは、ええ、しなくていいんです。でも、私の邪魔もしません。

配列の値を全く表示しません。

artmedia70 です。

ループの前にある配列のすべてのセルの値をアンプリントする - もしかしたら、ワンちゃんはそこを掘っている?



//+-------------------------------------------------------------------------------------+
//| Закрытие ордеров, отсортированных по размеру лотов                                  |
//+-------------------------------------------------------------------------------------+
void ClosePosBySortLots()
{
   double a[][2];
   int p = 0;
   
   for (int i=OrdersTotal()-1; i>=0; i--)
   {
      if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderType() < 2)
      {
         p++;
         ArrayResize(a, p);
         a[p-1][0] = OrderLots();
         a[p-1][1] = OrderTicket();
      }
   }
//   pr ("ClosePosBySortLots(): " + "p = " + p);
   if (p > 0)
   {
      ArraySort(a, WHOLE_ARRAY, 0, MODE_DESCEND);
      
      for(i=0; i<=p; i++)
      {
          pr("a[i][1] = " + a[i][1]);
          i++;
      }
      
      for(i=0; i<p; i++)
      {
         if (OrderSelect(a[i][1], SELECT_BY_TICKET, MODE_TRADES))
         {
             if (OrderCloseTime() == 0) ClosePosBySelect();
         }
      }
   }
}

出力が全然空っぽなんですけど...。

 
hoz:

配列の値が全く出力されない。


全く何も出力されない...。

どのくらい空いているのか?全く何も表示されないのか、それとも配列のセルにゼロが残っているのか?
 

なぜ、ループの本体でiを増やすのか?

 for(i=0; i<=p; i++)
      {
          pr("a[i][1] = " + a[i][1]);
          i++;    // ??????????????????????????????????????
      }

と、これ: i<=p, なぜ "or equal to" なのか?