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

 
BeerGod:

マニュアル取引3日目、今日で取引終了


おめでとうございます。ユーロのプルバックダウンで売りをたくさん持っている-クローズド、ポンドで-ノー...

50,000セント-オーバーしました-もういいです!:-)

 

ごあいさつ

このコードに詳しい人がいるかもしれませんね。

//-----------------Закрытие по истории в безубыток--------------------
   //---------------------расчет по истории ордеров номера очередной итерации----------------------------------------------- 
  Iteration = 0; // зануляем инерации перед их учетом в цикле по истории
  Sum_Loss = 0;  // суммарный убыток по этим итерациям

datetime 
Time_at_History_Current = 0,
Time_at_History_Previos = 0;     
 
 if(OrdersHistoryTotal() != 0)
   {
    for(int counter = OrdersHistoryTotal()-1; counter >= 0; counter--)
      {
       OrderSelect(counter, SELECT_BY_POS, MODE_HISTORY);
       if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
         {
          if(OrderType() == OP_BUY || OrderType() == OP_SELL)
            {
             if(OrderProfit() < 0) // если убыток по выбранному ордеру, то считаем суммарный и записываем время закрытия ордера
                                   // для последующего его анализа при подсчете количества итераций
                {
                 double lastLoss = OrderProfit();
                 Sum_Loss=Sum_Loss+lastLoss;  // считаем общий убыток по закрытым подряд убыточным ордерам
                 Time_at_History_Current = OrderCloseTime();
                } 
             
             //Print(" Time_at_History_Current_в цикле = ", TimeToStr(Time_at_History_Current, TIME_DATE|TIME_SECONDS));
             //Print(" Time_at_History_Previos_в цикле = ", TimeToStr(Time_at_History_Previos, TIME_DATE|TIME_SECONDS));
             
             if(Time_at_History_Current != Time_at_History_Previos) // если они не равны, то считаем итерации и делаем их равными
               {
                Time_at_History_Previos = Time_at_History_Current ;
                Iteration++;
                //Print("Iteration at History в условии сравнения  = ",  Iteration);
               }   
             else // они равны, то проверяем, дополнительно, наличие профита по выбранному следующему ордеру и выходим из цикла
               {
                if(OrderProfit() >= 0)
                  break;
               }
            }
         }
      }
   }

if (Sum_Loss < 0.0) { // Имеем убыток по закрытым позам
double money = Lots;
   BuyLots = GetBuyLotsSum();
        SellLots = GetSellLotsSum();
        if(BuyLots  > SellLots)money = BuyLots * 10;
        if(BuyLots  < SellLots)money = SellLots * 10;
  if (((AccountEquity() + Sum_Loss + (Sum_Loss / money)) >= AccountBalance()) && (((totalSell > 0) && (totalBuy < 1)) || ((totalSell < 1) && (totalBuy > 0)))) { // Достигли безубытка
    // Здесь какой-то код, который необходимо выполнить при достижении безубытка
        CloseAllBuy();
           CloseAllSell();
           Sum_Loss = 0.0;
           

マイナスで取引が終了した場合、ループが開かれ、次の注文がゼロより上で終了した場合、つまり残高がプラスでマイナスより小さい場合、マイナスにプラスを加え、新しいマイナス値を取得しますが、これはすでに小さくなっています。

if(OrderProfit() >= 0 && Sum_Loss < 0.0)
                  double lastLoss_two = OrderProfit();
                 Sum_Loss=Sum_Loss+lastLoss_two;  // считаем общий убыток по закрытым подряд убыточным ордерам
                 Time_at_History_Current = OrderCloseTime();
               }

もし、シグナルに従って、よりマイナスになった場合は、注文をクローズして、サイクルを最初から開始します。

 
belck:

こんにちは。

もしかしたら、このコードに詳しい方がいらっしゃるかもしれませんね。

はい、これは私のコードです。すでに書きましたが、私のロールオーバーマーティンでは次のように使っています。

最後の取引(ポーズ)が利益で決済された場合、フリップ数(イテレーション)をゼロにし、マイナスの場合はスタートロットから始めます。

で、負けトレードの連続回数を数え、出来高を増やして反対方向にオープンする。

これは、アバランチ同名の 支店を参照)のネッティングバージョンです。すなわち、成行注文は(数量の増加時にポジションフリップで)閉じられ、反対の成行注文は株式スキームに応じてより大きな数量で開始されます。以下は、私のコードの作業部分です。同様のExpアルゴリズムがある場合は、必要に応じて編集してください。質問の意味がわからないのですが。あなたは "どんな初心者の質問... "で状況に関係なく尋ねることができ、ちょうどあなたの質問を詳しく説明し、何も(少なくとも私にとって)明確ではありませんので - まったくない。

  //---------------------расчет по истории ордеров номера очередной итерации----------------------------------------------- 
  Iteration = 0; // зануляем инерации перед их учетом в цикле по истории
  Sum_Loss = 0;  // суммарный убыток по этим итерациям
  datetime 
  Time_at_History_Current = 0,
  Time_at_History_Previos = 0;      
  if(OrdersHistoryTotal() != 0)
   {
    for(int counter = OrdersHistoryTotal()-1; counter >= 0; counter--)
      {
       OrderSelect(counter, SELECT_BY_POS, MODE_HISTORY);
       if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
         {
          if(OrderType() == OP_BUY || OrderType() == OP_SELL)
            {
             if(OrderProfit() < 0) // если убыток по выбранному ордеру, то считаем суммарный и записываем время закрытия ордера
                                   // для последующего его анализа при подсчете количества итераций
                {
                 double lastLoss = OrderProfit();
                 Sum_Loss=Sum_Loss+lastLoss;  // считаем общий убыток по закрытым подряд убыточным ордерам
                 Time_at_History_Current = OrderCloseTime();
                } 
             
             //Print(" Time_at_History_Current_в цикле = ", TimeToStr(Time_at_History_Current, TIME_DATE|TIME_SECONDS));
             //Print(" Time_at_History_Previos_в цикле = ", TimeToStr(Time_at_History_Previos, TIME_DATE|TIME_SECONDS));
             
             if(Time_at_History_Current != Time_at_History_Previos) // если они не равны, то считаем итерации и делаем их равными
               {
                Time_at_History_Previos = Time_at_History_Current ;
                Iteration++;              
                //Print("Iteration at History в условии сравнения  = ",  Iteration);
               }   
             else // они равны, то проверяем, дополнительно, наличие профита по выбранному следующему ордеру и выходим из цикла
               {
                if(OrderProfit() >= 0) 
                  break;
               }
            }
         }
      }
   }
 //Print("Iteration at History = ",  Iteration, " Time_at_History_Current = ", TimeToStr(Time_at_History_Current, TIME_DATE|TIME_SECONDS),
 //      " Time_at_History_Previos = ", TimeToStr(Time_at_History_Previos, TIME_DATE|TIME_SECONDS));
       
    //-----------------------------------------------------расчет динамического канала----------------------------    
    if (Symbol() == "GBPJPY" || Symbol() == "EURJPY" || Symbol() == "USDJPY" || Symbol() == "CHFJPY" ||  Symbol() == "NZDJPY")  
      // || Symbol() == "XAUUSD" || Symbol() == "XAGUSD" || Symbol() == "EURGBP")   StopLossPips = StopLoss;    // т.к. волатильность (по АТР) другая (выше)
         {                 
           channel = (iATR(Symbol(),PERIOD_D1,Period_ATR,1)*1000)*Mul_Sl;                 
           StopLossPips = NormalizeDouble(channel,0);                                                                                                         
         }       
    else
         {                 
           channel = 10* (iATR(Symbol(),PERIOD_D1,Period_ATR,1)*10000/3)*Mul_Sl;                 
           StopLossPips = NormalizeDouble(channel,0);                                                                                                         
         }               
   TakeProfitPips=NormalizeDouble(StopLossPips*Mul_TP,0);  // расчет уровня тейка для всех инструментов по заданному значению динамического стопа        
                          
   // ------------------------------------------------Ищем наш ордер---------------------------------
   int orderType;
   for (int orderIndex = (OrdersTotal() - 1); orderIndex >= 0; orderIndex--)
   {
      if (!OrderSelect(orderIndex, SELECT_BY_POS))     continue; // если ордер не выбран, то идем на следующий открытый
      if(OrderCloseTime()!=0) continue;                    // если тикет принадлежит закрытому ордеру, то берем следующий открытый
      if ((OrderSymbol() != Symbol()) || (OrderMagicNumber() != MagicNumber)) continue;
      orderType = OrderType();
      if ((orderType != OP_BUY) && (orderType != OP_SELL)) continue;
          ticket = OrderTicket( );                         // Номер ордера
          orderLots = OrderLots();                         // Lots   
          orderProfit = OrderProfit() + OrderSwap();       // Profit
          Price = OrderOpenPrice();                        // Цена открытия рыночного ордера
          SL =  OrderStopLoss();                           // Значение StopLoss ордера
          TP = OrderTakeProfit();                          // Значение TakeProfit ордера          
          if (ticket>0)                                    // Если позиция открылась
              {
                while(OrderSelect(ticket,SELECT_BY_TICKET)==false)       // Если ордер выбран
                Sleep(100);                                 
                double OpenPrice=OrderOpenPrice();
       // Print("OrderTicket()=",OrderTicket(),  "OrderOpenTime()=",OrderOpenTime()); 
       // Print("TimeLocal()=",TimeLocal());                                                                    
                     //---------------------Запоминаем значения сл и тп ордера                     
                if (orderType == OP_BUY) 
                   {                
                     V_StopLossPips = NormalizeDouble(OpenPrice  - (StopLossPips * Point), Digits);
                     V_TakeProfitPips = NormalizeDouble(OpenPrice + (TakeProfitPips * Point), Digits);
                   }
            
                if (orderType == OP_SELL) 
                   {        
                     V_StopLossPips = NormalizeDouble(OpenPrice  + (StopLossPips * Point), Digits);
                     V_TakeProfitPips = NormalizeDouble(OpenPrice - (TakeProfitPips * Point), Digits);
                   }   
                            
              }
             
     // Проверка на предельную просадку      
      double loss = - ((orderProfit * 100.0) / AccountBalance());
      if (loss > MaxLoss)
      {
         Print ("MaxLoss");
         CloseAllOrders(MagicNumber);
         IsExpertFailed = true;
         return (0);
      }
    
       // Проверка закрытия открытой позиции (ордера) по стоп-лоссу           
      if ( V_StopLossPips != 0 )
        {
          if (orderType == OP_BUY && Bid <=  V_StopLossPips)  { CloseAllOrders(MagicNumber); Print ("V_StopLossPips закрываем по сл = ", V_StopLossPips); }             
          if (OrderType()== OP_SELL && Ask >=  V_StopLossPips){ CloseAllOrders(MagicNumber); Print ("V_StopLossPips закрываем по сл = ", V_StopLossPips); }  
        }         
        
        // Проверка закрытия открытой позиции (ордера) по тейку        
        if ( V_TakeProfitPips != 0 && MathAbs(orderProfit) > MathAbs (Sum_Loss))
        {
          if (orderType == OP_BUY && Bid >=  V_TakeProfitPips)  { CloseAllOrders(MagicNumber); Print ("V_TakeProfitPips закрываем по ТР = ", V_TakeProfitPips); }             
          if (OrderType()== OP_SELL && Ask <=  V_TakeProfitPips){ CloseAllOrders(MagicNumber); Print ("V_TakeProfitPips закрываем по ТР = ", V_TakeProfitPips); }  
        }        
      
      
      // Если тралить, то с соответствующего номера итерации при выполнении НЕОБХОДИМОГО УСЛОВИЯ соответствующим 
      // выбранному видом трала      
      
      if (UseTrailing==1) if ((Iteration >= k)&& (MathAbs(orderProfit) > (MathAbs (Sum_Loss))))
         switch(type)
          {
           case 0:  // простой трал по аналогии учебнику - в зависимости от параметра trlinloss (тралить ли в зоне лоссов)
                   if (orderType == OP_BUY)  SampleTrailing_texbook (0, V_StopLossPips, V_TakeProfitPips); // если бай
                   if (orderType == OP_SELL) SampleTrailing_texbook (1, V_StopLossPips, V_TakeProfitPips); // если селл
                   break;
           //трал по фракталам + отступ (Indent)
           case 1: TrailingByFractals_LAVINA(ticket,signal_period,Sum_Loss,Lots_New,V_StopLossPips,trlinloss); break; 
            //трал по теням N свечей + отступ (Indent)       
           case 2: TrailingByShadows  (ticket,signal_period,Sum_Loss,Lots_New,V_StopLossPips,trlinloss);  break;   
          }           
       

追伸:今食べている私の戦闘ロボットを全部奪ってください。2010年9月から、ちゃんとしたアルゴリズムに中断と終了を繰り返しながら、取り組んでいます。スレッド-アバランチを ご覧ください。

 

許容サイズより大きいため、トレーラーでのコードの継続。

 
     
ファイル:
itdakxijrxj.mq4  11 kb
 
Roman.:

はい、これは私のコードです。すでに書きましたが、私のロールオーバーマーティンでは次のように使っています。

最後の取引(ポーズ)が利益で決済された場合、反転回数(イテレーション)をゼロにし、赤字の場合はスタートロットでスタートします。

は、連続した不採算取引の回数を計算し、出来高を増やして反対方向に開く。

これは、アバランチ同名の 支店を参照)のネッティングバージョンです。すなわち、成行注文は(数量の増加時にポジションフリップで)閉じられ、反対の成行注文は株式スキームに応じてより大きな数量で開始されます。以下は、私のコードの作業部分です。同様のExpアルゴリズムがある場合は、必要に応じて編集してください。質問の意味がわからないのですが。しかし、あなたの質問をもっと明確に記述してください、なぜなら何も(少なくとも私にとって)明確ではないからです。

追伸:こうして食べている私の戦闘ロボットを全て倒すつもりなんですね。2010年9月から、ちゃんとしたアルゴリズムに中断と終了を繰り返しながら、取り組んでいます。スレッド-アバランチを ご覧ください。


すでに「どんな初心者の質問」スレッドで質問しているのですが、沈黙が続いています。

状況は、このコードが損失で取引を終了するとき、マイナス残高を記憶し、プラスで取引を終了し、プラスが残高より少ないとき、それはSum_Lossをゼロにし、私はそれがゼロにならないようにする必要があり、刈り取られることです。

だから、今はこうなっているんです。

クローズした注文をチェックし、クローズした注文の利益がゼロより小さければ、その利益をSum_Lossに加え、オープンした取引の利益がSum_Lossを超える(超える予定)まで続け、達した時点で取引をクローズし、Sum_Lossをゼロにして再びサイクルを開始します。

必要なんです。

の注文がマイナスで決済されると、そのマイナス分の利益がSum_Lossに加算され、次の取引がプラスの利益で決済されると、Sum_Lossは利益から受け取った分だけ減少し、つまり次の新規注文Sum_Lossはすでに小さい金額になっており、注文利益がSum_Lossより高くなるまで、Sum_Lossはクリアされて新しいサイクルが始まる。

Sum_Loss = 0;

1回目の決済注文:利益(-50)<0

Sum_Loss + 利益 (Sum_Loss + (-50))

Sum_Loss = -50;

2回目の決済注文:利益(+40)>0かつSum_Loss<0

損失額+利益額 (Sum_Loss + 40)

Sum_Loss = -10

 
belck:

1.すでに「どんな初心者の質問」スレッドに対応済みで沈黙しています。

状況は、このコードが損失で取引を終了したとき、負の残高を記憶していますが、利益で取引を終了し、プラスが残高より少ないとき、Sum_Lossをリセットしますが、私はそれをリセットするのではなく、刈り取ることが必要です。

2.つまり、今はこういうことです。

クローズした注文をチェックし、クローズした注文の利益がゼロより小さい場合、この利益をSum_Lossに加え、オープンした取引の利益がSum_Lossを超えない(超える)ようになるまで続け、達した時点で取引を終了し、Sum_Lossはリセットされてサイクルが再び開始されます。

3.必要なんです。

注文がマイナスで決済されると、そのマイナス分の利益がSum_Lossに加算され、次の取引がプラスの利益で決済されると、Sum_Lossはその利益から受け取った分だけ減少します。つまり、次のオープン取引はより少ないSum_Loss額を受け取り、注文利益がSum_Lossより大きくなるまで、Sum_Lossはクリアされて新しいサイクルが開始されるのです。

Sum_Loss = 0;

1回目の決済注文:利益(-50)<0

Sum_Loss + 利益 (Sum_Loss + (-50))

Sum_Loss = -50;

2回目の決済注文:利益(+40)>0かつSum_Loss<0

損失額+利益額 (Sum_Loss + 40)

Sum_Loss = -10

1.もう一度応募する。そこには、必ずあなたを助けてくれる人がいる。 以前、あなたのコードをそのブランチに入れたことがあります...儘に

2.そうなんです、これがAvalancheの基本アルゴリズムですから。

3.これらをすべて、このアルゴリズムのコードとともに初心者スレッドに記述してください。人はそれを修正する。mcl4でコードを書くことを自分で一貫して静かに始める。

自分でできないなら、第5フォーラムの「ジョブ」のセクションに行ってみてください - 彼らはそこに食べ物を書いています...

個人的に興味がある方のみ、無料でゼロからコードを書きます。

すべてです。

 

息を吐くように...:-)

今回の注文の束は...利益 確定しました

DoublePlusとvse_dlya_sela_J_OsMA_khフクロウ+私のバリエーション(TSの記述もあり)設定付き - 枝にあります。

 
Roman.:

息を吐くように...:-)

今回の注文の束は...利益 確定しました

DoublePlusとvse_dlya_sela_J_OsMA_khフクロウ+私のバリアント(TSの記述もあり)設定あり - 枝にあります。


そして、個人的にプログラミングの方法を知っているのですか?

私はプログラマーとしてはあまり得意ではありません。

もしかしたら、まだコードを完成させるのを手伝ってくれるかも?

 
Roman.:

息を吐くように...:-)

今回の注文の束は...利益 確定しました

そして、利益前にロットを追加しなかったことを後悔している?:))
 
belck:

私はプログラマーとしてはあまり得意ではありません。

結局のところ、コードを仕上げるのを手伝ってくれるかも?

自分でできない場合は、mql5.comの「ジョブズ」サービスに連絡しましょう。あなたの気まぐれをすべて素早くやってくれますよ。