アドバイザー、インジケーターの微調整に役立つ - ページ 5

 
Natalya Dzerzhinskaya:
異なるTFでのピンバーをどのように識別するのですか?

それは、識別するのに最適な方法です))

extern int TF = 60//Тайм фрейм на котором определяем пинбары
//---
bool PinbarLong, PinbarShort;
//---
int start() {    

      PinbarLong  = MathMin(iOpen(Symbol(), TF, 1),iClose(Symbol(), TF, 1))- iLow(Symbol(), TF, 1)
                    >= (iHigh(Symbol(), TF, 1)-iLow(Symbol(), TF, 1))*0.75;           

      PinbarShort = iHigh(Symbol(), TF, 1)- MathMax(iOpen(Symbol(), TF, 1),iClose(Symbol(), TF, 1))
                    >= (iHigh(Symbol(), TF, 1)-iLow(Symbol(), TF, 1))*0.75;  

     if (PinbarLong) действие для buy;
     if (PinbarShort) действие для sell;

return(0);}//StartEnd
 
FXwin:

それが定義です:))

良い選択肢だ!!!ありがとうございました))

 
Natalya Dzerzhinskaya:

良い選択肢だ!!!ありがとうございます))

作者の許可を得て、クロスプラットフォーム機能を掲載します

//===============================================================================================
//---------------------------------- Функция находит Пин-бар -----------------------------------+
//===============================================================================================
MqlRates _rates[1];
int GetPinBar(string symb="0", ENUM_TIMEFRAMES tf=0, double kf=0.75) {
 if(symb=="0") symb=Symbol();
  double open1=0,high1=0,low1=0,close1=0;
   CopyRates(symb,tf,1,1,_rates);
   open1=rates[0].open;
   high1=rates[0].high;
   low1=rates[0].low;
   close1=rates[0].close;
    if(MathMin(open1,close1)-low1 >=(high1-low1)*kf) return(1);
    if(high1-MathMax(open1,close1)>=(high1-low1)*kf) return(2);
  return(0);
 }
 
Vitaly Muzichenko:

作者の許可を得て、クロスプラットフォーム機能を掲載します

私はあくまで「FOR」参加です))

 
こんにちは!ロボットのセットアップを手伝ってください。終了時刻を追加してもダメ。
ファイル:
0j1_uhskn.mq4  14 kb
 
Romal001:
終了時刻を追加したのに、うまくいかない。

時間は足しましたが、決算処理は足しませんでした))


 
int BuyOrders()
 {
  int co,t;
  for(co=0; co<OrdersTotal(); co++)
   {
    if(OrderSelect(co,SELECT_BY_POS))
     if(OrderSymbol()==Symbol())
      if(OrderMagicNumber()==Magik)
       {
        if(OrderType()==OP_BUY) t++;
       }
   }
  return(t); 
 }

int SellOrders()
 {
  int cp,t;
  for(cp=0; cp<OrdersTotal(); cp++)
   {
    if(OrderSelect(cp,SELECT_BY_POS))
     if(OrderSymbol()==Symbol())
      if(OrderMagicNumber()==Magik)
       {
        if(OrderType()==OP_SELL) t++;
       }
   }
  return(t); 
 }
 
void CloseSell()
 {
  int t;
  while(SellOrders()>0)
   {
    for(int c=0; c<=OrdersTotal();c++)
     {
      if(OrderSelect(c,SELECT_BY_POS, MODE_TRADES))
       if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magik)//
        {              
         if(OrderType()==OP_SELL)
          {
           for(t=0; t<=5; t++)
            {
             RefreshRates();
             int ticket=OrderClose(OrderTicket(),OrderLots(),Ask,10,Red);
             int e=GetLastError();
             if(e==0) break; else Print("error close Sell : "+e);
            }
          }
        }
     }
   }
  return;
 }

void CloseBuy()
 {
  int t;
  while(BuyOrders()>0)
   {
    for(int c=0; c<=OrdersTotal();c++)
     {
      if(OrderSelect(c,SELECT_BY_POS, MODE_TRADES))
       if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magik) //
        {              
         if(OrderType()==OP_BUY)
          {
           for(t=0; t<=5; t++)
            {
             RefreshRates();
             int ticket=OrderClose(OrderTicket(),OrderLots(),Bid,10,Red);
             int e=GetLastError();
             if(e==0) break; else Print("error close Sell : "+e);
            }
          }
        }
     }
   }
  return;
 }
こんな感じ。
 
Romal001:
こんな感じ。

持っている、そうでない、そうでないは通用しない。

 
if(closeneed && OrdersTotal()>0){
      CloseBuy(); CloseSell();
 
Romal001:

修正方法


ファイル: