[警告は閉鎖されました!】フォーラムを乱雑にしないために、どんな初心者の質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしでは、どこにも行けない。 - ページ 829

 
dimon74:
役に立つかもしれない!!!Bidと言う一つの価格を基準にしてみてください。OP_SELLSTOPの 始値はBid OP_BUYSTOPの始値はBid+87*Point (または必要な数)になります。
アイデアが見えてきました!ありがとうございます。
 
Vinin:

これで1人のマジシャン、パラメータを設定すると

プライベートメッセージを見て...
 

よろしくお願いします。多分、誰かがコードに関数を実装する方法を知っていて、それはどんな値(例えばOrderCloseTime())であっても、履歴からの最後から2番目の値を比較し(私たちはクローズドポジションについて話して います)、もしそれらが異なるなら(この場合、最後から2番目の値は最後より小さい) - BLA-BLA-BLAを作る。可能であれば、私のコードを改良するか、間違った方向に持っていったのであれば自分で書いてください。

double C_T_L_C_P() {

datetime t;

double r=0;

int i, k=OrdersHistoryTotal(), q=0;

if (q==0)

for (i=0; i<k; i++) {

if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)==true) {

if (OrderType()==OP_BUY || OrderType()==OP_SELL) {

if (t<OrderCloseTime()) {r=OrderCloseTime();}

}}}

return (r);}

ありがとうございました。

 

チェックに役立つ。

最初のユニットがサイクルに現れた後、このユニットがt+t1時間保持するかどうかをチェックする(デルタ秒ごとにチェックする)。それが維持されれば買い、ある時点で維持されなくなればループから抜ける。つまり、デルタ間隔ごとにチェックし、常に1であれば、その信号は有効である。

私の考えは正しいのでしょうか?

if(sign0==1) //проверка начинаертя только после появления 1 
     {
      t=TimeCurrent();                                     //фиксируем время
                                                           //в цикле от t до t+t1 через каждые дельта секунд
       while(t<t+t1)                                       //t1 отрезок времени в перед за которое будем проверять if(sign0==1)
         {
            if(sign0==1)                                   //еще паз проверка наличия  1
              sign1=1;                                    //новой переменой присваиваем 1
            else
              {sign1=0;break;}                             // если нет присваиваем 0 и заканчиваем цикл
            t=t+delta;                                     //проверяем через каждые дельта секунд
         }
      if(sign1==1) op="BUY";
            return;
     }
 
gince:

チェックに役立つ。

最初のユニットがサイクルに現れた後、このユニットがt+t1時間保持するかどうかをチェックする(デルタ秒ごとにチェックする)。それが維持されれば買い、ある時点で維持されなくなればループから抜ける。

私の考えは正しいのでしょうか?


その結果、無限whileループ(tは常に<t+t1、t1=0の場合のみ)が発生します。ループ内では常にsign1 =1
 
abolk:

その結果、無限whileループ(tは常に<t+t1、t1=0の場合のみ)が発生します。ループ内では常にsign1 =1

エラーを修正する方法は?
 
gince:

エラーを修正するには?

エラーを修正するためには、アルゴリズム(コードではなく、アルゴリズム)を詳しく説明する必要があります。そして、アルゴリズムにコードを重ねる
 
abolk:

エラーを修正するためには、アルゴリズムを詳細に説明する必要があります

2値信号の0または1を受信します。1を受信したら、この瞬間から10分(600秒)保持できるかどうかを60秒ごとにチェックする。10分間にすべて1があればBuy、一度でも1がなければチェックを終了し、オープンのシグナルがないと判断する。
 
gince:

2値信号の0または1を受信します。1を受信したら、この瞬間から10分間(600秒)保持できるかどうかを60秒ごとにチェックし始める。10分足がすべて1であれば買い、少なくとも1でなければチェックを終了し、オープンのシグナルがないと判断する。

離散信号sign0がどのように変化するかは、コード上では明らかではありません。提示されたコードでは、信号は変化しない。変更されたTと連携する試みは失敗している。
 
void CheckForOpen()
  {
   
   int    res;
   datetime t;
   int sign=0;
//---- go trading only for first tiks of new bar


  
  double tr0=iCustom(NULL,0,"trd",0,0);
  double tr1=iCustom(NULL,0,"trd",1,0); 
//---- sell conditions
   if(tr1==1)  
     {
      t=TimeCurrent();
       while(t<t+tim)
         {
            if(tr1==1)
              sign=-1;
            else
              {sign=0;break;}
            t=t+delta;
         }
      if(sign==-1) 
      res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",MAGICMA,0,Red);
      return;
     }
Moving Average.mq4から引用しています。