村人の稼ぎ方を学ぶ【第2話】! - ページ 298

 
YOUNGA:
私はこの伝説を思いついた - 買いの取引は売りの取引とほぼ同じなので、一緒にテストする理由はない - 実際、EAには売りでの取引のためのモジュールがない(しかし、それは買いの場合と同じです) 保留指値注文でのみ取引する
つまり、常に最初に買いでタッチして、その後売りにぶつけてCloseByでクローズするということですか?もし、それがダウンして長期にわたったら?
 

これはテストのポイントです - 私たちは長い間ダウンして、買い注文だけを開いた場合、システムは死ぬはずです(私は繰り返し - 原則として、売却の順序はありません)。現在は修正されています。

 
YOUNGA:

私は、エクイティカーブが相似形であることを発見しました - そう、反対側のマーチンゲールです。ロットサイズは、lastlot = NormalizeDouble(R/(StopLoss-Step*(CountTrades(OP_BUY))) という式で算出されます。),2) R=5...50 レベル間のステップ距離


カーブは魅力的かもしれない、好みの問題だが、このような最大限のドローダウンで年率10%を稼ぐのは非情である。
 
まあ、これで応募の半分くらいかな ;-)収益性をどうやっても上げられない(年率20%くらいだろう)。これまで、ロット計算のアプローチを示してきました。
 
Roman.:

ビデオのようにしなければ...。当初はIMHOでは、ご覧ください...


命じられたように:)))

初回入金額 10000

初期ロット1

ランダムエントリー、1ペア売り、1ペア買い

TR ~10pip

SL ~40bp

ストップロスが発生するとロットが2倍になります。

ファイル:
 
pako:


命じられたように:)))

初回入金額 10000

初期ロット1

ランダムエントリー、1ペア売り、1ペア買い

TR ~10pip

SL ~40bp

ストップロスが発生すると、ロットが "2倍 "になります。

なぜコード-クローズドなのか?

チェックしてみてください。このようなパターンがあるのか/ないのか?

4にあります。

int start()    // -----------------------СТАРТ ЭКСПЕРТА--------------- 
{
 //while(GetAsyncKeyState(16)){Sleep(500);} 
 
//   if(iTime(Symbol(),s_signal_period,0) == prevtime) return(0);    //ждем нового бара на сигнальном таймфрейме
//   prevtime = iTime(Symbol(),s_signal_period,0);                   //если появился новый бар, то включаемся

   if (IsExpertStopped) { Comment("Не удалось инициализировать советник!"); return (0);}   
   if (IsExpertFailed)  { Comment("Критическая ошибка! Советник остановлен."); return (0);}
   
   //---------------------расчет по истории ордеров номера очередной итерации----------------------------------------------- 
  int time = 0;  // время - для определения факта работы только с крайним закрытым ордером
  
  bool pos1 = false, pos2 = false;

   
       
//---Поиск крайних отработавших ордеров для открытия очередных позиций на увеличенных при лоссе и стартовых при профите объёмах   
   for (int orderIndex = (OrdersHistoryTotal() - 1); orderIndex >= 0; orderIndex--)
   {   
      if (!OrderSelect(orderIndex, SELECT_BY_POS, MODE_HISTORY)) {Print(" Ошибка при доступе к исторической базе (",GetLastError(),")");continue;}   
      if ((OrderSymbol() != Symb1)  || (OrderMagicNumber() != MagicNumber))  continue;              
   //------------------------- Принимаем в расчет только ордер, закрытый cамым крайним -----------------------
      if (time<OrderCloseTime())     //(сравниваем его с хранящимся в переменной time) 
        {
         time=OrderCloseTime();     //если время закрытия ордера больше - ложим его в переменную     
         int lastType = OrderType();
         double lastLots1 = OrderLots();
         double lastProfit1 = OrderProfit() + OrderSwap();
        }  
   }
     
   time = 0;
   for (orderIndex = (OrdersHistoryTotal() - 1); orderIndex >= 0; orderIndex--)
   {   
      if (!OrderSelect(orderIndex, SELECT_BY_POS, MODE_HISTORY)) {Print(" Ошибка при доступе к исторической базе (",GetLastError(),")");continue;}   
      if ((OrderSymbol () != Symb2) || (OrderMagicNumber() != MagicNumber))  continue;  
                  
   //------------------------- Принимаем в расчет только ордер, закрытый cамым крайним -----------------------
      if (time<OrderCloseTime())     //(сравниваем его с хранящимся в переменной time) 
        {
         time=OrderCloseTime();     //если время закрытия ордера больше - ложим его в переменную     
         lastType = OrderType();
         double lastLots2 = OrderLots();
         double lastProfit2 = OrderProfit() + OrderSwap();
        } 
   }       
//-------------------------------- продолжение стартовым после профита или увеличение по мартину  -----------------------------------------------------------------         
pos1 = ExistPositions(Symb1,-1,MagicNumber,0);
pos2 = ExistPositions(Symb2,-1,MagicNumber,0);
 
 if (pos1 == false && pos2 == false) // при отсутствии позиций в рынке по символам
    {       
            
         
 // Анализ крайних двух ордеров по двум инструментам на профит для принятия решения по объёму следующих     
         if (lastProfit1 > 0 && lastProfit2 > 0)
         {
  //---Ордер закрылся с прибылью - обнуляем счетчик итераций, счетчик для подсчета последовательного убытка позиций колен лавины,
  //---текущий и суммарный убыток и открываемся стартовым лотом по тренду                 
            
            // Ордера закрылись в профит, открыться стартовым лотом            
          if (MathRand() > 16384)
             {  
              WmOrderSend(Symb1, OP_BUY,  Lots, MarketInfo(Symb1,MODE_ASK), MarketInfo(Symb1,MODE_BID) - StopLossPips *  MarketInfo(Symb1,MODE_POINT), MarketInfo(Symb1,MODE_BID) + TakeProfitPips * MarketInfo(Symb1,MODE_POINT), " старт ", MagicNumber);
              WmOrderSend(Symb2, OP_SELL, Lots, MarketInfo(Symb2,MODE_BID), MarketInfo(Symb2,MODE_ASK) + StopLossPips *  MarketInfo(Symb2,MODE_POINT), MarketInfo(Symb2,MODE_ASK) - TakeProfitPips * MarketInfo(Symb2,MODE_POINT), " старт ", MagicNumber);
             } 
          else 
             {  
              WmOrderSend(Symb1, OP_SELL, Lots, MarketInfo(Symb1,MODE_BID), MarketInfo(Symb1,MODE_ASK) + StopLossPips *  MarketInfo(Symb1,MODE_POINT), MarketInfo(Symb1,MODE_ASK) - TakeProfitPips * MarketInfo(Symb1,MODE_POINT), " старт ", MagicNumber);
              WmOrderSend(Symb2, OP_BUY,  Lots, MarketInfo(Symb2,MODE_ASK), MarketInfo(Symb2,MODE_BID) - StopLossPips *  MarketInfo(Symb2,MODE_POINT), MarketInfo(Symb2,MODE_BID) + TakeProfitPips * MarketInfo(Symb2,MODE_POINT), " старт ", MagicNumber);
             }                 
                
         }
         
         
        if (lastProfit1 < 0 && lastProfit2 > 0)  
           {
               
              // Ордер по первому символу закрылся с убытком - открываемся по нему увеличенными объёмами        
              Lots_New = lastLots1 * 2;                  
              
                   
 // ---------НОРМАЛИЗАЦИЯ НОВЫХ РАСЧЕТНЫХ ЛОТОВ И ОТКРЫТИЕ ОЧЕРЕДНОЙ ПОЗИЦИИ...            
                    Lots_New = NormalizeLots(Lots_New);
                    if (MathRand() > 16384)
                       {  
                        WmOrderSend(Symb2, OP_BUY,  Lots,     MarketInfo(Symb2,MODE_ASK), MarketInfo(Symb2,MODE_BID) - StopLossPips *  MarketInfo(Symb2,MODE_POINT), MarketInfo(Symb2,MODE_BID) + TakeProfitPips * MarketInfo(Symb2,MODE_POINT),  " бАх ", MagicNumber);
                        WmOrderSend(Symb1, OP_SELL, Lots_New, MarketInfo(Symb1,MODE_BID), MarketInfo(Symb1,MODE_ASK) + StopLossPips *  MarketInfo(Symb1,MODE_POINT), MarketInfo(Symb1,MODE_ASK) - TakeProfitPips * MarketInfo(Symb1,MODE_POINT), " бАх ", MagicNumber);
                       } 
                    else 
                       {  
                        WmOrderSend(Symb2, OP_SELL, Lots,     MarketInfo(Symb2,MODE_BID), MarketInfo(Symb2,MODE_ASK) + StopLossPips *  MarketInfo(Symb2,MODE_POINT), MarketInfo(Symb2,MODE_ASK) - TakeProfitPips * MarketInfo(Symb2,MODE_POINT), " бАх ", MagicNumber);
                        WmOrderSend(Symb1, OP_BUY,  Lots_New, MarketInfo(Symb1,MODE_ASK), MarketInfo(Symb1,MODE_BID) - StopLossPips *  MarketInfo(Symb1,MODE_POINT), MarketInfo(Symb1,MODE_BID) + TakeProfitPips * MarketInfo(Symb1,MODE_POINT), " бАх ", MagicNumber);
                       }     
                                            
           }       
           
      if (lastProfit1 > 0 && lastProfit2 < 0)  
           {
               
              // Ордер по первому символу закрылся с убытком - открываемся по нему увеличенными объёмами             
              Lots_New = lastLots2 * 2; // Последующие лоты открываются в соответствие с классическим мартином - удвоение         
                   
 // ---------НОРМАЛИЗАЦИЯ НОВЫХ РАСЧЕТНЫХ ЛОТОВ И ОТКРЫТИЕ ОЧЕРЕДНОЙ ПОЗИЦИИ...            
                    Lots_New = NormalizeLots(Lots_New);
                    if (MathRand() > 16384)
                       {  
                        WmOrderSend(Symb1, OP_BUY,  Lots,     MarketInfo(Symb1,MODE_ASK), MarketInfo(Symb1,MODE_BID) - StopLossPips *  MarketInfo(Symb1,MODE_POINT), MarketInfo(Symb1,MODE_BID) + TakeProfitPips * MarketInfo(Symb1,MODE_POINT), " бАх ", MagicNumber);
                        WmOrderSend(Symb2, OP_SELL, Lots_New, MarketInfo(Symb2,MODE_BID), MarketInfo(Symb2,MODE_ASK) + StopLossPips *  MarketInfo(Symb2,MODE_POINT), MarketInfo(Symb2,MODE_ASK) - TakeProfitPips * MarketInfo(Symb2,MODE_POINT), " бАх ", MagicNumber);
                       } 
                    else 
                       {  
                        WmOrderSend(Symb1, OP_SELL, Lots,     MarketInfo(Symb1,MODE_BID), MarketInfo(Symb1,MODE_ASK) + StopLossPips *  MarketInfo(Symb1,MODE_POINT), MarketInfo(Symb1,MODE_ASK) - TakeProfitPips * MarketInfo(Symb1,MODE_POINT), " бАх ", MagicNumber);
                        WmOrderSend(Symb2, OP_BUY,  Lots_New, MarketInfo(Symb2,MODE_ASK), MarketInfo(Symb2,MODE_BID) - StopLossPips *  MarketInfo(Symb2,MODE_POINT), MarketInfo(Symb2,MODE_BID) + TakeProfitPips * MarketInfo(Symb2,MODE_POINT), " бАх ", MagicNumber);
                       }     
                                            
           }  
           
       if (lastProfit1 < 0 && lastProfit2 < 0) // Этого варианта нет на видео - удваивает объёмы на обоих символах  
           {
               
                     
                    Lots_New1 = lastLots1 * 2;
                    Lots_New2 = lastLots2 * 2;   
                                
 // ---------НОРМАЛИЗАЦИЯ НОВЫХ РАСЧЕТНЫХ ЛОТОВ И ОТКРЫТИЕ ОЧЕРЕДНОЙ ПОЗИЦИИ...            
                    Lots_New = NormalizeLots(Lots_New);
                    if (MathRand() > 16384)
                       {  
                        WmOrderSend(Symb2, OP_BUY,  Lots_New2, MarketInfo(Symb2,MODE_ASK), MarketInfo(Symb2,MODE_BID) - StopLossPips *  MarketInfo(Symb2,MODE_POINT), MarketInfo(Symb2,MODE_BID) + TakeProfitPips * MarketInfo(Symb2,MODE_POINT),  " бАх ", MagicNumber);
                        WmOrderSend(Symb1, OP_SELL, Lots_New1, MarketInfo(Symb1,MODE_BID), MarketInfo(Symb1,MODE_ASK) + StopLossPips *  MarketInfo(Symb1,MODE_POINT), MarketInfo(Symb1,MODE_ASK) - TakeProfitPips * MarketInfo(Symb1,MODE_POINT), " бАх ", MagicNumber);
                       } 
                    else 
                       {  
                        WmOrderSend(Symb2, OP_SELL, Lots_New2, MarketInfo(Symb2,MODE_BID), MarketInfo(Symb2,MODE_ASK) + StopLossPips *  MarketInfo(Symb2,MODE_POINT), MarketInfo(Symb2,MODE_ASK) - TakeProfitPips * MarketInfo(Symb2,MODE_POINT), " бАх ", MagicNumber);
                        WmOrderSend(Symb1, OP_BUY,  Lots_New1, MarketInfo(Symb1,MODE_ASK), MarketInfo(Symb1,MODE_BID) - StopLossPips *  MarketInfo(Symb1,MODE_POINT), MarketInfo(Symb1,MODE_BID) + TakeProfitPips * MarketInfo(Symb1,MODE_POINT), " бАх ", MagicNumber);
                       }     
                                            
           }       
    }       
//---------------------------------------------------------------------------------------------------               
   
   // ----------------------- Свежих закрытых ордеров не было - открытие стартовым лотом ------------    
pos1 = ExistPositions(Symb1,-1,MagicNumber,0);
pos2 = ExistPositions(Symb2,-1,MagicNumber,0);
 if (pos1 == false && pos2 == false) // при отсутствии позиций в рынке по символам
    {       
     if (MathRand() > 16384)
             {  
              WmOrderSend(Symb1, OP_BUY,  Lots, MarketInfo(Symb1,MODE_ASK), MarketInfo(Symb1,MODE_BID) - StopLossPips *  MarketInfo(Symb1,MODE_POINT), MarketInfo(Symb1,MODE_BID) + TakeProfitPips * MarketInfo(Symb1,MODE_POINT), " старт ", MagicNumber);
              WmOrderSend(Symb2, OP_SELL, Lots, MarketInfo(Symb2,MODE_BID), MarketInfo(Symb2,MODE_ASK) + StopLossPips *  MarketInfo(Symb2,MODE_POINT), MarketInfo(Symb2,MODE_ASK) - TakeProfitPips * MarketInfo(Symb2,MODE_POINT), " старт ", MagicNumber);
             } 
          else 
             {  
              WmOrderSend(Symb1, OP_SELL, Lots, MarketInfo(Symb1,MODE_BID), MarketInfo(Symb1,MODE_ASK) + StopLossPips *  MarketInfo(Symb1,MODE_POINT), MarketInfo(Symb1,MODE_ASK) - TakeProfitPips * MarketInfo(Symb1,MODE_POINT), " старт ", MagicNumber);
              WmOrderSend(Symb2, OP_BUY,  Lots, MarketInfo(Symb2,MODE_ASK), MarketInfo(Symb2,MODE_BID) - StopLossPips *  MarketInfo(Symb2,MODE_POINT), MarketInfo(Symb2,MODE_BID) + TakeProfitPips * MarketInfo(Symb2,MODE_POINT), " старт ", MagicNumber);
             }    
    }         
    
    Print (" lastProfit1 = ", lastProfit1, " lastProfit2 = ", lastProfit2);                 
        
        
   return(0);    //  ВЫХОД ИЗ СТАРТ
}
ファイル:
fcusvedptz.mq4  22 kb
zymzspzmcy.ex4  10 kb
 
Roman.:

なぜコードがロックされているのですか?

ほら、こんなスキームがある/ない?

"知的財産" :))) いくつかのイベントの後、ソースコードを蝋燭しないでください(((

で、MQやWinDoofのようにアドバイスしないのは、おそらくすべて理由があるのでしょう :)))

いや、そこの理屈は極めて単純だ。

ランダム遺伝子 0:1

0なら売り、1なら買い

両者共にプラスで引けた場合、オッズ1
Else, 係数2, カウンタ1

とうとう

まけおしみ) ((

 
pako:

"知的財産" :))) いくつかのイベントの後、ソースコードを蝋燭しないでください(((

で、MQやWinDoofのようにアドバイスしないのは、おそらくすべて理由があるのでしょう :)))

いや、そこの理屈は極めて単純だ。

ランダム遺伝子 0:1

0なら売り、1なら買い

両者がプラスになればオッズ1
両方がプラスで終了した場合、オッズは2、カウンターは1です。

とうとう

まけおしみ) ((


なるほど。映像ではそう見えませんね。一方がプラス側、他方がマイナス側であれば、マイナス側の方のlot_previous * 2とする。プラスで閉じたものが、スタートするものを開く。映像にすべてがある。

私自身はもう少し後に5について書きますが...。

 
Roman.:


なるほど。映像ではそう見えませんね。一方がプラス側、他方がマイナス側であれば、マイナス側の方のlot_previous * 2とする。プラスで閉じたものが、スタートするものを開く。映像にすべてがある。

私自身はもう少し後に5について書きますが...。


確かに、よく見ていなかったですね、失礼しました。
 
pako:

確かに、よく見ていなかったですね、失礼しました。
:-)