Просмотр исходного кода

Ticket : 4847 Add a hold in second input

1) Time Hold in Seconds feature Added
faiz ali месяцев назад: 6
Родитель
Сommit
a6052da777
2 измененных файлов с 62 добавлено и 26 удалено
  1. BIN
      V2/CribMarketEAV2.ex5
  2. 62 26
      V2/CribMarketEAV2.mq5

BIN
V2/CribMarketEAV2.ex5


+ 62 - 26
V2/CribMarketEAV2.mq5

@@ -34,6 +34,7 @@ input       double               lotSize               = 0.01;                 /
34
 input       bool                 enableBasketTP        = true;               // Enable Basket TP
34
 input       bool                 enableBasketTP        = true;               // Enable Basket TP
35
 input       double               basketTakeProfit      = 1.0;               // Basket Take Profit
35
 input       double               basketTakeProfit      = 1.0;               // Basket Take Profit
36
 input       int                  maxOpenPositions      = 3;                // Maximum number of Combinations
36
 input       int                  maxOpenPositions      = 3;                // Maximum number of Combinations
37
+input       int                  miniHoldTimeSec       = 120;             // Mini time in (seconds) to hold trades closing before checking TP
37
 
38
 
38
 
39
 
39
 string goldPairs[];
40
 string goldPairs[];
@@ -298,40 +299,42 @@ void checkBasketTakeProfit()
298
      {
299
      {
299
       if(newTradeStore[i].buyTicket != -1 && newTradeStore[i].sellTicket != -1)
300
       if(newTradeStore[i].buyTicket != -1 && newTradeStore[i].sellTicket != -1)
300
         {
301
         {
301
-         double combinationProfit = 0;
302
-
303
-         if(PositionSelectByTicket(newTradeStore[i].buyTicket))
304
-           {
305
-            Print("Ticket:",newTradeStore[i].buyTicket);
306
-            Print("Profit:",PositionGetDouble(POSITION_PROFIT), " Swap:",PositionGetDouble(POSITION_SWAP));
307
-            combinationProfit += PositionGetDouble(POSITION_PROFIT) + PositionGetDouble(POSITION_SWAP) ;
308
-           }
309
-
310
-         if(PositionSelectByTicket(newTradeStore[i].sellTicket))
302
+         if(miniTimeBeforeClosing(newTradeStore[i].buyTicket, newTradeStore[i].sellTicket))
311
            {
303
            {
312
-           
313
-            Print("Ticket:",newTradeStore[i].sellTicket);
314
-            Print("Profit:",PositionGetDouble(POSITION_PROFIT), " Swap:",PositionGetDouble(POSITION_SWAP));
315
-            combinationProfit += PositionGetDouble(POSITION_PROFIT) + PositionGetDouble(POSITION_SWAP);
316
-           }
304
+            double combinationProfit = 0;
317
 
305
 
318
-         if(combinationProfit >= basketTakeProfit)
319
-           {
320
-            Print("Combination TP hit: Closing trades. Profit = ", combinationProfit);
306
+            if(PositionSelectByTicket(newTradeStore[i].buyTicket))
307
+              {
308
+               Print("Ticket:",newTradeStore[i].buyTicket);
309
+               Print("Profit:",PositionGetDouble(POSITION_PROFIT), " Swap:",PositionGetDouble(POSITION_SWAP));
310
+               combinationProfit += PositionGetDouble(POSITION_PROFIT) + PositionGetDouble(POSITION_SWAP) ;
311
+              }
321
 
312
 
322
-            if(!trade.PositionClose(newTradeStore[i].buyTicket))
313
+            if(PositionSelectByTicket(newTradeStore[i].sellTicket))
323
               {
314
               {
324
-               Print(" Error Closing Buy Trade : ", newTradeStore[i].buyTicket," ",GetLastError());
315
+               Print("Ticket:",newTradeStore[i].sellTicket);
316
+               Print("Profit:",PositionGetDouble(POSITION_PROFIT), " Swap:",PositionGetDouble(POSITION_SWAP));
317
+               combinationProfit += PositionGetDouble(POSITION_PROFIT) + PositionGetDouble(POSITION_SWAP);
325
               }
318
               }
326
-            else
327
-               Print("Buy Trade Closed: ", newTradeStore[i].buyTicket);
328
 
319
 
329
-            if(!trade.PositionClose(newTradeStore[i].sellTicket))
320
+            if(combinationProfit >= basketTakeProfit)
330
               {
321
               {
331
-               Print(" Error Closing Sell Trade : ", newTradeStore[i].sellTicket," ",GetLastError());
322
+               Print("Combination TP hit: Closing trades. Profit = ", combinationProfit);
323
+
324
+               if(!trade.PositionClose(newTradeStore[i].buyTicket))
325
+                 {
326
+                  Print(" Error Closing Buy Trade : ", newTradeStore[i].buyTicket," ",GetLastError());
327
+                 }
328
+               else
329
+                  Print("Buy Trade Closed: ", newTradeStore[i].buyTicket);
330
+
331
+               if(!trade.PositionClose(newTradeStore[i].sellTicket))
332
+                 {
333
+                  Print(" Error Closing Sell Trade : ", newTradeStore[i].sellTicket," ",GetLastError());
334
+                 }
335
+               else
336
+                  Print("Sell Trade Closed: ", newTradeStore[i].sellTicket);
332
               }
337
               }
333
-            else
334
-               Print("Sell Trade Closed: ", newTradeStore[i].sellTicket);
335
            }
338
            }
336
         }
339
         }
337
      }
340
      }
@@ -438,5 +441,38 @@ bool canTradeSymbol(string symbol1, string symbol2, ENUM_POSITION_TYPE type1, EN
438
 //+------------------------------------------------------------------+
441
 //+------------------------------------------------------------------+
439
 //|                                                                  |
442
 //|                                                                  |
440
 //+------------------------------------------------------------------+
443
 //+------------------------------------------------------------------+
444
+bool miniTimeBeforeClosing(ulong buyTicket, ulong sellTicket)
445
+  {
446
+   datetime currentTime = TimeCurrent();
447
+   datetime buyTime = 0;
448
+   datetime sellTime = 0;
449
+
450
+   if(PositionSelectByTicket(buyTicket))
451
+     {
452
+      buyTime = (datetime)PositionGetInteger(POSITION_TIME);
453
+     }
454
+
455
+   if(PositionSelectByTicket(sellTicket))
456
+     {
457
+      sellTime = (datetime)PositionGetInteger(POSITION_TIME);
458
+     }
459
+
460
+   datetime comboOpenTime = (buyTime > sellTime) ? buyTime : sellTime;
461
+   int secondsHeld = (int)(currentTime - comboOpenTime);
462
+
463
+   if(secondsHeld >= miniHoldTimeSec)
464
+     {
465
+      Print("Minimum time REACHED (", secondsHeld, "s) ");
466
+      return true;
467
+     }
468
+   else
469
+     {
470
+      int secondsRemaining = miniHoldTimeSec - secondsHeld;
471
+      Print("Minimum time NOT reached (", secondsHeld, "/", miniHoldTimeSec, "s) ",
472
+            secondsRemaining, "s remaining");
473
+      return false;
474
+     }
475
+  }
476
+//+------------------------------------------------------------------+
441
 
477
 
442
 //+------------------------------------------------------------------+
478
 //+------------------------------------------------------------------+