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

 

こんにちは...

EAを書いたが、この問題にぶつかった。

私は逆の注文をしていて、例えば買いには150pipsのストップと150pipsの利益を設定し、売りには同じレベルを設定していますが、ただ逆になっています(つまり、買い利益があるものは、次に売りストップ)、つまり実際には、買いで売り、売りで買いの両方を同時にすべて決済しなければなりません...しかしもう一つあります、スプレッド!)))。そして、この2つの反対命令から、他の8つがすでに開かれている(もちろん、8つすべてが必要な場合は、その条件は異なり、4/4の反対命令でもある)。


注文が同じ価格になったときに、すべての注文を一度に決済するようにコードを正しくプログラムするにはどうしたらよいでしょうか。テスターの場合、テストすると、例えば、売りクローズ(所定の水準に達していない、スプレッドだと思います)、買い吊りで、しばらくして下落し、ストップで買いクローズと、希望の水準に達することがあり、正しい結果を見ることができません。


プログラム的に、つまりコードで表現していただけるとありがたいです。


より詳しく理解するために、私の2つの反対(最初の)注文が開かれている部分をあげます。

if (by == FALSE) 
   {   g_ticket_112 = OrderSend(Symbol(), OP_BUY, Lots, NormalizeDouble(Ask, Digits), 1, NormalizeDouble(Ask - SL * Point, Digits), 
       NormalizeDouble(Ask + TP * Point, Digits), "", 111, 0, Blue);
   if (g_ticket_112 > 0) by = TRUE;
   } 
     
     if (se == false) 
   {for (g_pos_116 = OrdersTotal() - 1; g_pos_116 >= 0; g_pos_116--) 
   {if (OrderSelect(g_pos_116, SELECT_BY_POS, MODE_TRADES)) 
   {if (OrderSymbol() != Symbol() || OrderMagicNumber() != 111) continue;
    if (se == false) 
   {g_ticket_113 = OrderSend(Symbol(), OP_SELL, Lots, NormalizeDouble(Bid, Digits), 1, 
    OrderTakeProfit(),OrderStopLoss() , "", 222, 0, Blue);
    if (g_ticket_113 > 0) se = TRUE;}}}} 
 
皆さんは、スケジュールをすべての週末に伸ばすスクリプトを持っていますか、つまり、スケジュールは月曜日にマージされず、土曜日と日曜日は空のままであることです。
 

皆さん、こんにちは。

問題は、新しいバーの オープニングを検出する機能(どのようなタイムフレームであっても)、より正確には、新しいバーを見つけるための異なるバリアントを持っているかということです。

 
dmitriy086:

皆さん、こんにちは。

問題は、新しいバーを開くという事実を決定する機能を誰が持っているか(どんな時間枠でも)、より正確には、異なるバリアント(トレーラ)は新しいバーを見つけることができるかということです。


時間を記憶する oldtime = Time[0] と記憶した時間を比較する if( oldtime !=Time[0])Print("Hurray for new bar !!!");

SZY:iTime()関数にトレーラがあります。

:)

 
//+------------------------------------------------------------------+
bool fNewBar()
  {
   static datetime NewTime=0;
   if(NewTime!=iTime (Symbol(),0,0))
    {
     if(NewTime==0)
      {
       NewTime=iTime (Symbol(),0,1);return(false);
      }      
     NewTime=iTime (Symbol(),0,0);
     return(true);
    }
   return(false);     
  }
//+----------------------------------------------------------------------------+

IgorM, 問題は、この f-fi が iTime[0] が iTime[1] と等しい合成チャート上にあることです。そこで、Expert Advisor が新しいバーで 1 つの取引のみを開くように時間を取り除くにはどうすればよいでしょうか。
 
dmitriy086:
IgorM, 問題は、この f-fi が iTime[0] が iTime[1] と等しいかもしれない合成チャート上にあることです。EA が新しいバーで 1 つの取引のみを開くように、時間を取り除くにはどうすればよいでしょうか。 。


何らかの理由で0と1のバーの時刻が一致しない場合 - datetime型はデータを 単位で保存するため、バーの時刻を少なくとも1秒変更する。

次に、 最初に閉じた バーのすべての特性、例えばOHLC、ボリューム、オープンタイムを記憶するようにしてください。

iBars()は、現在のタイムフレームのバーの数を表示し、端末の設定によって 制限されます、あなたはバーの数を格納されているバーの番号と比較してみることができ、新しいバーの時に、これらの値は異なっている - しかし、常にではない、それは私のためにこのように動作しましたが、おそらくMT4ビルド番号のためにこのオプションが動作しない場合があります。

 
ひょっとして、既成のコードはありませんか? OHLC[1]を記憶してOHLC[0]と比較する方法がわからないのですが...。
 
dmitriy086:
コードの断片が用意されていないんですね。 OHLC[1]を記憶してOHLC[0]と比較する方法がわからないんですが...。


OHLCはOpen、High、Low、Closeの頭文字をとったものです。

をゼロと比較するのではなく、最初に記憶したものと比較する、つまり

init(){。

oldHigh = High[1];

///

}

start(){。

double tmp = High[1];

if(tmp !=oldHigh) {oldHigh = tmp;

//バーの残りのパラメータをチェックする

}

}

 

ありがとうございます!調べてみます...。

 

この機器にオープンポジションがあるかどうか、ポジションオープン 条件での正しいチェックの設定方法をアドバイスください。また、シンボルのポジションがある場合(売りでも買いでも)、オープニングは発生せず、そうでない場合はポジションをオープンするシグナルがトリガーされるのでしょうか?

以下はそのコードです(ポジションを開く役割を担っていると思われます)。

if (NumberOfPositions("" ,-1,Magic)>=2)  флаг1=1;//если число позиций >= 2
if (NumberOfPositions("" ,-1,Magic)<1 )  флаг1=0;//если нет откр. позиций
if ( TradeDOWN==true && флаг1==0) {//если условия соответствуют заданным  
//продаем 1-й символ и покупаем второй символ
//----------------------------------------
if (NumberOfPositions(Symbol_1,OP_SELL,Magic)<1){//если нет поз.селл и поз.бай по 1-му символу
 if (NumberOfPositions(Symbol_1,OP_BUY,Magic)<1)
 {
 SL=0;TP=0;//открываем позицию, задаем стопы :
if(StopLoss_1>0)   SL=Bid_Tiker1+POINT_Tiker1*StopLoss_1;
if(TakeProfit_1>0) TP=Bid_Tiker1-POINT_Tiker1*TakeProfit_1; 
 ti=OpenPosition(Symbol_1, OP_SELL, Lots_1,0 ,0,Magic);
if(StopLoss_1>0 || TakeProfit_1>0) {//ставим стопы 
if (OrderSelect(ti, SELECT_BY_TICKET)) ModifyOrder(-1, SL, TP, clModifySell);}
                                   }}//если нет поз.селл и поз.бай по 1-му символу
//--------------------------------------
if (NumberOfPositions(Symbol_2,OP_BUY,Magic)<1){//если нет поз. бай и поз. селл по 2-му символу 
 if (NumberOfPositions(Symbol_2,OP_SELL,Magic)<1)
 {
   SL=0;TP=0;//открываем позицию, задаем стопы :
if(StopLoss_2>0)   SL=Bid_Tiker2-POINT_Tiker2*StopLoss_2;
if(TakeProfit_2>0) TP=Ask_Tiker2+POINT_Tiker2*TakeProfit_2;   
ti=OpenPosition(Symbol_2, OP_BUY, Lots_2,0,0,Magic);
if(StopLoss_2>0 || TakeProfit_2>0) {//ставим стопы 
if (OrderSelect(ti, SELECT_BY_TICKET))ModifyOrder(-1, SL, TP, clModifyBuy); }
                                   }}//если нет поз. бай и поз. селл по 2-му символу

論理的には正しいようですが、それでも1つのシンボルに対して複数のポジションが開いてしまいます。

P.S. 私はプログラマーではありません。もし可能であれば、もっと詳しく説明してください。