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

 

こんばんは。

取引週の終わりに、すべてのポジションの決済とすべての注文の削除を追加する方法を教えてください。

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

 
Antonius:

こんばんは。

取引週の終わりに、すべてのポジションの決済とすべての注文の削除を追加する方法を教えてください。

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

そんなスクリプトを書いて、クローズするときにチャートに放り込んで、全部消す。以上です...。

どういたしまして。

 
artmedia70:

そんなスクリプトを書いて、クローズするときにチャートに放り込んで、全部消す。要は...

お願い!



ありがとうございます:)要望を明確にすること。

取引週の終わりにすべての注文とポジションをクローズするコードをEAに追加する必要があります。

このコードを書いていただけませんか?

 
Antonius:


ありがとうございます:)要望を明確にすること。

取引週の終わりにすべての注文とポジションをクローズするコードをEAに追加する必要があります。

このコードを書いていただけませんか?

できるんです。問題ありません。自分で何かをしたことがありますか?このスレッドは、無料で物を手に入れるためではなく、自分でコーディングしようとしている人を助けるためのものです。
 
artmedia70:
できるんです。問題ありません。自分で何かをしたことがありますか?このスレッドは、無料で何かを用意することではなく、自分でコーディングしようとしている人を助けるためのものです。


https://book.mql4.com/ru/trading/orderclose、調べました。

googleで検索して、フォーラムで検索して。見つからなかった。クエリーの書き方が間違っているのかもしれません。

初心者スレで聞こうと思って。

 

どのように処方すればよいのですか?

スクリプトを実行すると

一般」タブと「入力パラメータ」タブを持つウィンドウがポップアップ表示されます。

入力パラメーターに日付を入力したいのですが、どうすればいいですか?

スクリプトを実行すると、日付のボックスがポップアップし、日付を入力してokをクリックすれば、すべてがうまくいくのでしょうか?

また、最後に入力した日付をスクリプトに記憶させることは可能ですか?

 
artmedia70:

ストップの最終閉位置を決定する関数はbool型ですが、あなたはそこからdouble型を返そうとしています。従って、0か1のどちらかを返す。

その中に1つの変数の参照渡しを追加してくださいということをお伝えしました。

では、最後の「Buy」を例に確認してみましょう。

このように...


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

ストップの最終閉位置を決定する関数はbool型ですが、あなたはそこからdouble型を返そうとしています。従って、0か1のどちらかを返す。

その中に1つの変数の参照渡しを追加してくださいということをお伝えしました。

では、最後の「Buy」を例に確認してみましょう。

このように...


言われたとおりに全部やりました。全てコンパイル済み......ですが、アドバイザーをテスト すると機能が動作しません......全てのポジションのアドバイザーが0.1ロットをオープンします。

double  Magic, Lot;

int start()
  {
        

  
 double Price=iOpen (Symbol (),0,0);
 

          
 int last_order_bar = 0;                                                                                                                        
 int ot = OrdersTotal();                                                                                                                        
                                                                                                                        
 if (ot>0) //если есть ордера в рынке                                                                                                                   
 {                                                                                                                      
   if (OrderSelect (ot-1,SELECT_BY_POS))                                                                                                                        
      if (OrderType ()==OP_BUY || OrderType ()==OP_SELL )                                                                                                                       
         last_order_bar = iBarShift (Symbol (),0,OrderOpenTime ());                                                                                                             
 }                                                                                                                      
                                                                                                                        
 int last_hist_order_bar = 0;                                                                                                                   
 int oht = OrdersHistoryTotal();                                                                                                                        
                                                                                                                
 if (oht>0)                                                                                                                     
 {                                                                                                                      
   if (OrderSelect (oht-1,SELECT_BY_POS, MODE_HISTORY))                                                                                                                         
      if (OrderType ()==OP_BUY || OrderType ()==OP_SELL)                                                                                                                        
         last_hist_order_bar = iBarShift (Symbol (),0,OrderOpenTime ());
                                                                                                        
        }

                                                                                                        
if (ot==0)

 if (Bid ==Price)
//=============================================================== 
  
if(((Open[1]-Close[1])>100*Point)&&((Open[1]-Close[1])<120*Point))
if(((High[1]-Open[1])>40*Point)&&((High[1]-Open[1])<60*Point))
if(((Close[1]-Low[1])>40*Point)&&((Close[1]-Low[1])<60*Point))

//============================================================
                                                                           // задавать минимальное значение лота я не стал,мне кажется для тестера это не обязательно
if (isCloseLastPosByStop(Symbol(), OP_BUY, Magic, Lot))                        
{
Lot=Lot*2;
OrderSend(Symbol(),OP_SELL,Lot,Bid,1,Ask+1500*Point,Ask-300*Point,"jfh",123 );
}
else
{

Lot=0.1;        
OrderSend(Symbol(),OP_SELL,1,Bid,Lot,Ask+1500*Point,Ask-300*Point,"jfh",123 );
}
   return(0);
  }
//============================================================  
bool isCloseLastPosByStop(string sy, int op, int mn, double ll)       //у Вас перед названием формального  параметра  11 стоял знак &- я его убрал.
{
   double   pt;
   datetime t;                                                       //у вас тип переменной t был int - я сделал datetime
   int       dg, i, j=-1, k=OrdersHistoryTotal()-1;

   for (i=k; i>=0; i--) 
   {
     if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) 
     {
         if (OrderMagicNumber()!=mn)   continue;   // если магик не тот, переходим к следующему
         if (OrderSymbol()!=sy)        continue;   // если символ не тот, переходим к следующему
         if (OrderType()!=op)           continue;   // если тип не тот, переходим к следующему
         if (t<OrderCloseTime()) 
         {
            t=OrderCloseTime();
            j=i;
            }
         }
      }
      
   if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) 
   {
      dg=MarketInfo(OrderSymbol(), MODE_DIGITS);      // количество знаков в цене символа ордера
      pt=MarketInfo(OrderSymbol(), MODE_POINT);       // размер пункта инструмента в валюте котировки ордера
      if (MathAbs(OrderClosePrice()-OrderStopLoss())< 0.5*pt) // Если закрыт по стопу
      { 
         ll=OrderLots();                              // записываем количество лотов в ордере, закрытом по стопу
         return(true);                                // возвращаем истину
         }
      }
      
   return(False);                                     // возвращаем ложь (позиции нету, либо не по стопу)
}

私の間違いが何なのか教えてください。

私はこの点を理解していない - あなたが正しく気づいたように、関数は、型のboolの値を返すが、関数の呼び出しで、関数は、型のboolの値を配置する必要があります。

他の値の種類を指定するよう提案されました。

ありがとうございます。

 
solnce600:

言われたとおりに全部やりました。コンパイルは全て完了したのですが、EAをテストすると機能が動作しません・・・全てのポジションでEAが0.1ロットオープンします。

私の間違いが何なのか、教えていただけませんか?

私はこの瞬間を理解していません - あなたが正しく気づいたように、関数はbool型の値を返しますが、関数はbool型の値を置くべきで、関数呼び出しで

他のタイプの値を指定することをお勧めしますか。

ありがとうございます。


bool isCloseLastPosByStop(string sy, int op, int mn, double ll)       //у Вас перед названием формального  параметра  11 стоял знак &- я его убрал.

なぜ削除したのですか。そのままにしておけば、すべてがうまくいったはずです。

 
Vinin:

なぜ削除するのか。もしそうなら、すべてがうまくいったはずだ

どうなんだろう......あの看板は......どういう意味なんだろう......。教科書に書いてあるようなことは思いつかない。