[ARCHIVE] フォーラムを散らかさないように、どんなルーキーでも質問してください。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 3. - ページ 477

 

例えば、10年後に取引口座の利益が500%だった場合(数字は想定)-。
すべての利益を再投資していることも考慮した、年間平均利益の算出方法について教えてください。
ありがとうございました。

 
frixer:
皆さんこんにちは、明けましておめでとうございます。一度だけ注文をさせることはできない、その後に条件が満たされればその時に必要、二度目の注文があればされない。一例を挙げたいと思います。

教科書に載っている例が 、あなたのケースです。
 
atztek:

例えば、10年後に取引口座の利益が500%だった場合(数字は想定)-。
すべての利益を再投資していることも考慮した、年間平均利益の算出方法について教えてください。
ありがとうございました。

6の平方根から1を引き、100を掛ける。年率19.62%を得ることができます。
 
下へ移動
 
Roman.:

チュートリアルの例は 、あなたのケースです。

私はそれを読みましたが、それは私のアルゴリズムで動作しませんし、私はまだすべてのティックで注文を持っています。

//+------------------------------------------------------------------+
//|                                                     trade v1.mq4 |
//|                                           |
//|                                                 frixer@yandex.ru |
//+------------------------------------------------------------------+

//--- input parameters
//extern int       Время;
//extern int       Input;
//extern int       SL;
//extern int       TP;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   int bars = 9; // количество баров
   int gmt = 16; // время входа
   double input = 0.0010; // вход на рынок
   double sl = 100; // уровень SL от высоты коробки в %
   double tp = 100;
   int lot=1;
   int topOrder,bottomOrder;
   if (Hour()==gmt) // проверяем свечу
      {
         double Shift_high = iHighest(NULL,PERIOD_H1,MODE_HIGH,bars,0); //поиск бара с максимальной ценой из bars начиная с 0-го бара
         double Shift_low  = iLowest (NULL,PERIOD_H1,MODE_LOW ,bars,0); //поиск бара с минимальной  ценой из bars начиная с 0-го бара
         double Price_high = iHigh   (NULL,PERIOD_H1,Shift_high); // присвоение переменной максимального значение цены
         double Price_low  = iLow    (NULL,PERIOD_H1,Shift_low);  // присвоение переменной минимального значение цены
         double Hinput = Price_high + input; // вверхняя граница входа
         double Linput = Price_low - input;  // нижняя граница входа
         double height_box = Price_high - Price_low; // высота коробки bars
         double volumeSL = height_box / 100 * sl; // уровень SL зависит от %
        
         
               topOrder=OrderSend(Symbol(),OP_BUYSTOP,lot,Hinput,3,Price_high-(height_box/100*sl),Price_high+(height_box/100*tp),"BUY",16384,0,Green);
                     if (topOrder<0)
                        {
                           Print("Верхний ордер ошибка #", GetLastError());
                           return(0);
                        }
      }
//----
   return(0);  
//----
   return(0);
  }
//+------------------------------------------------------------------+

この方法で試しましたが(友人からのアドバイス)、うまくいきません。

         int Orerov=0;
         int Orderov_all = OrdersTotal();                                              // всего ордеров в терминале
            for (int n = 0;n<Orderov_all;n++)                                             // начало цикла перебора ордеров
            {
            if(OrderSelect(n,SELECT_BY_POS)==TRUE)                                  // выбран первый в списке ордер
            if(Comm == OrderComment())                                                // условие совпадения комментария
               {
                Tip= OrderType();                                                    // тип      
                Cena=NormalizeDouble(OrderOpenPrice(),4);                           // цена      
                Ticket= OrderTicket();                                               // тикет     
                Stop=NormalizeDouble(OrderStopLoss(),4);                            // стоп-лосс
                LOT=NormalizeDouble(OrderLots(),1);                                 // размер лота
                Orderov=1;                                                          //
               }
             }
 
frixer:
皆さんこんにちは、明けましておめでとうございます。一度だけ注文し、その後に条件を満たせば、二度目の注文があったとしても、注文されないという方法が見つかりません。例を挙げるとすれば。

if (OrdersTotal() > 0) {
   return(0);
}
// Если установлен хоть один ордер, то никакой код после этого комментария уже не выполнится
 
Reshetov:
6の10乗の根から1を引き、100を掛ける。年間19.62%を獲得しています。

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

 
Reshetov:

ありがとうございます...
 

ともかく、ここで質問です。

マルチピリオドインジケータを持っています。

計算を最適化するために、次のようなループを使っています。



// TimeFrames[i] массив с периодами

for (i=0; i<NumTimeFrames; i++)

{
if (total_bars[i] != iBars(instrument, TimeFrames[i]) )
{

// тут вычисления индиктора

total_bars[i] = iBars(instrument, TimeFrames[i]);
}

}



主な問題は、iBarsが 現在の期間以外の期間の価格を読み込まないことです...。

IndicatorCounted や RefreshRates のような MQL のすべてのトリック

は現在の期間に対してのみ機能します。つまり、iBarsは履歴から取得し、履歴はチャート上で期間を変更することによってのみ読み込まれます。どうすればいいのか?MQLには、バックグラウンドで他の期間(現在の期間とは異なる)のバーを読み込むためのツールはありますか?


p.s. 乱筆乱文でなければいいのですが((
 
palladin:

主な問題は、iBarsが現在の期間以外の価格を読み込まないことです...

あなたの主な問題は、iBarsが 価格ではなく、指定された期間の既知のバーの数をロードすることです。そして、今確認したところ、テスター上でもチャート上でも、まったく正しく表示されています。