MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 38

 
Vitalie Postolache:

そして、引数が用意されているので、その引数を関数に渡します。外した方が良いとはいえ、トートロジーである。

また、ループ内のすべての注文が再計算されるわけではありません。

for(i=OrdersTotal()-1; i>=0; i--)
そんないい加減な価格ではないので、自社のEAと比較してみるのもいいかと思います。
修正し、引数を挿入し、グローバルスコープに配置したところ、この引数はすでに他の関数で入力として使用されているという警告が発生しました。

上書きのあるチケットで、マーチンのある最後のオーダーから作業します。

そして、'count' hides グローバル宣言の行を削除する方法です。

として機能させるのが面白い。

今のところ、テスターはかなり良い結果を示していますが、時々「Expert Advisorで乗り越えられないエラー」が発生します。

 

ごあいさつ

このフォーマットでの録音を偶然発見。

if (OrderSelect(ticket, SELECT_BY_TICKET)) OrderModify(ticket, OrderOpenPrice(), SL, TP, 0;

すなわち...ここでは、条件付きif文が、式ではなくbool型 取引関数に置き換えられて いるのです。このような書き込みは、イコール...という理解でよいのでしょうか?

if(OrderSelect(ticket,SELECT_BY_TICKET))==true {OrderModify(ticket,OrderOpenPrice(), SL, TP,0};?

ヘルプとチュートリアルの両方を見ましたが、そのような形式は見つかりませんでした。

この方法で、式の代わりに別の型の関数を直接記述することはできますか?また、その場合、どのようなアルゴリズムになるのでしょうか。

 
trader781:
修正しました。引数を入れてグローバルスコープにすると、この引数はすでに他の関数で入力として使用されているという警告が発生します。

上書きのあるチケット、マーティンとの最後の注文からの作業

そして、'count' の宣言を削除すると、その行でグローバル宣言が隠れます。

本来の機能を発揮させることができるのが面白い。

今のところ、テスターはかなり良い結果を示していますが、時々「Expert Advisorで乗り越えられないエラー」が発生します。

推測がコードなしで出てくるので、修正版を示してください。
 
spoiltboy:

ごあいさつ

このフォーマットでの録音を偶然発見。

if (OrderSelect(ticket, SELECT_BY_TICKET)) OrderModify(ticket, OrderOpenPrice(), SL, TP, 0;

すなわち...ここでは、条件付きif文が、式ではなくbool型 取引関数に置き換えられて いるのである。このような書き込みは、イコール...という理解でよいのでしょうか?

if(OrderSelect(ticket,SELECT_BY_TICKET))==true {OrderModify(ticket,OrderOpenPrice(), SL, TP,0};?

ヘルプとチュートリアルの両方を見ましたが、そのような形式は見つかりませんでした。

この方法で、式の代わりに別の型の関数を直接記述することはできますか?その場合、どのようなアルゴリズムになるのでしょうか?

ただ、if(OrderSelect(ticket,SELECT_BY_TICKET))==true {OrderModify(ticket,OrderOpenPrice(), SL, TP,0}; は動作しない でしょう。条件は括弧の外に投げてはならない。

しかし、もし(OrderSelect(ticket,SELECT_BY_TICKET)==true) ならば{OrderModify(ticket,OrderOpenPrice(), SL, TP,0}; ができる。

 
Vitalie Postolache:

ちょうど、if(OrderSelect(ticket,SELECT_BY_TICKET))==true {OrderModify(ticket,OrderOpenPrice(), SL, TP,0}; が動作しない のと同じです。条件は括弧の外に投げてはならない。

しかし、もし(OrderSelect(ticket,SELECT_BY_TICKET)==true) ならば{OrderModify(ticket,OrderOpenPrice(), SL, TP,0}; ができる。

そうです、( )で誤植を見逃したのです。そうでなければ、この質問は関連性があります。
 
Vitalie Postolache:
コードがないと推測になってしまうので、修正したものを見せてください。

なるほど。

できることは、なんとなく終わらせた。描写はできている。目標は、なぜ思い通りに動かないのかを理解することです。

ファイル:
count.mq4  19 kb
 
//+------------------------------------------------------------------+
//|                                                      ОТЛОЖКИ.mq4 |
//+------------------------------------------------------------------+
extern double StopLoss     = 1000; //Стоплосс ордера  
extern double TakeProfit   = 1500; //Тейкпрофит ордера
extern double TrailingStop = 1000; // трал
extern int    Delta        = 100; //Расстояние от цены для установки ордера
extern double LOT          = 0.1; //Объём позиции
extern int    Magic        =200;
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  if (TrailingStop!=0) Trailing();
  
   //ИНДИКАТОР RSI
   double RSI0=iRSI(NULL,0,5,PRICE_CLOSE,0);
   double RSI1=iRSI(NULL,0,5,PRICE_CLOSE,1);
  
   int b,s,p,res;
   double BuyPrice=Ask+Delta*Point;
   double SellPrice=Bid-Delta*Point;
  
   for (int i=0; i<OrdersTotal(); i++)
    {
     if (OrderSelect(i, SELECT_BY_POS)==true)
      {  
        if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) p++;
        if (OrderType()==OP_BUYSTOP) b++;
        if (OrderType()==OP_SELLSTOP) s++;        
      }  
    }
      double SL,TP;
//---- buy stop
   if(RSI0>50&&RSI1<50)
     {
          
      res=OrderSend(Symbol(),OP_BUYSTOP,LOT,BuyPrice,0,BuyPrice-StopLoss*Point,BuyPrice+TakeProfit*Point,"ОТЛОЖКИ",Magic,OP_SELLSTOP,Blue);
     }        
//---- sell stop  
   if(RSI0<50&&RSI1>50)
     {

      res=OrderSend(Symbol(),OP_SELLSTOP,LOT,SellPrice,0,SellPrice+StopLoss*Point,SellPrice-TakeProfit*Point,"ОТЛОЖКИ",Magic,OP_BUYSTOP,Red );
     }
//---- buy stop делете
      if(RSI0<50&&RSI1>50)
    {
     OrderDelete( OrderTicket());
    
    }
//---- sell stop делете
      if(RSI0>50&&RSI1<50)
    {
     OrderDelete( OrderTicket());
    
    }
//----
   return(0);
  }
//--------------------------------------------------------------------
//---------ФУНКЦИЯ ТРАЛА----------------------------------------------
//--------------------------------------------------------------------

void Trailing()
{
   for(int i=0; i<OrdersTotal(); i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      if(OrderSymbol()==Symbol()||OrderMagicNumber()==Magic)
       if(OrderType()==OP_BUY)
         {
          if(TrailingStop>0)  
            {                
              if(Bid-OrderOpenPrice()>TrailingStop)
               {
                 if(OrderStopLoss()<Bid-TrailingStop)
                  {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop,OrderTakeProfit(),0,Green);
                  }
               }
            }
         }
        
        if(OrderType()==OP_SELL)
         {
           if(TrailingStop>0)  
            {                
              if((OrderOpenPrice()-Ask)>TrailingStop)
               {
                 if((OrderStopLoss()>(Ask+TrailingStop)) || (OrderStopLoss()==0))
                  {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TrailingStop,OrderTakeProfit(),0,Red);
                  }
               }
            }
         }  
   }
}
//+------------------------------------------------------------------------------------+
//+------------------------------------------------------------------------------------+--------------------------------------------------------------------+
注文が削除されないのですが?
 

注文が削除されないのですが?
未開封の注文のチケットはどのようにして手に入れたのですか?
 
trader781:
で、未開封の注文のチケットはどうやって手に入れたのでしょうか?
そうでしょう、どうしても入れられないんです。
for (int i=0; i<OrdersTotal(); i++)
    {
     if (OrderSelect(i, SELECT_BY_POS)==true)
      {  
        if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) p++;
        if (OrderType()==OP_BUYSTOP)
             if (сигнал_bue) OrderDelete(OrderTicket());
                 else b++;
        if (OrderType()==OP_SELLSTOP)
             if (сигнал_sell) OrderDelete(OrderTicket());
                 else s++;
      }  
    }
 
Movlat Baghiyev:
そうでしょう、どうしても入れられないんです。
for (int i=0; i<OrdersTotal(); i++)
    {
     if (OrderSelect(i, SELECT_BY_POS)==true)
      {  
        if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) p++;
        if (OrderType()==OP_BUYSTOP)
             if (сигнал_bue) OrderDelete(OrderTicket());
                 else b++;
        if (OrderType()==OP_SELLSTOP)
             if (сигнал_sell) OrderDelete(OrderTicket());
                 else s++;
      }  
    }
どう説明したらいいのかわからない。でも、間違いなく名作です。
理由: