Bladeren bron

Ticket : 4847 Add a hold in second input

1) Time Hold in Seconds feature Added
faiz ali 6 maanden geleden
bovenliggende
commit
a6052da777
2 gewijzigde bestanden met toevoegingen van 62 en 26 verwijderingen
  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 34
 input       bool                 enableBasketTP        = true;               // Enable Basket TP
35 35
 input       double               basketTakeProfit      = 1.0;               // Basket Take Profit
36 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 40
 string goldPairs[];
@@ -298,40 +299,42 @@ void checkBasketTakeProfit()
298 299
      {
299 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
 //+------------------------------------------------------------------+