Переглянути джерело

Ticket : 4797 Multi Pair Entry Bot

1) Works on all Pairs in Market watch
2) Now Combination Logic Added
faiz ali 6 місяців тому
батько
коміт
fb8ea12512
2 змінених файлів з 53 додано та 57 видалено
  1. BIN
      V2/CribMarketEAV2.ex5
  2. 53 57
      V2/CribMarketEAV2.mq5

BIN
V2/CribMarketEAV2.ex5


+ 53 - 57
V2/CribMarketEAV2.mq5

@@ -54,31 +54,8 @@ int OnInit()
54 54
 
55 55
    getSymbolsFromMarketWatch();
56 56
 
57
+// addToStructure(153718680, 153718681, "EURUSD", "XAUUSD.");
57 58
 
58
-//   if(enableBasketTP == true)
59
-//     {
60
-//      checkBasketTakeProfit();
61
-//     }
62
-//
63
-//   string symbolToBuy = getSymbolWithLowestAsk();
64
-//   string symbolToSell = getSymbolWithHighestBid();
65
-////Print(" Symbol to Buy is: ", symbolToBuy, " Symbol to Sell: ", symbolToSell);
66
-//
67
-//   if(noOfActiveOrdersOfType(POSITION_TYPE_BUY) < maxOpenPositions)
68
-//     {
69
-//      if(symbolToBuy != NULL && symbolToBuy != "")
70
-//        {
71
-//         placeBuyTrade(symbolToBuy);
72
-//        }
73
-//     }
74
-//
75
-//   if(noOfActiveOrdersOfType(POSITION_TYPE_SELL) < maxOpenPositions)
76
-//     {
77
-//      if(symbolToSell != NULL && symbolToSell != "")
78
-//        {
79
-//         placeSellTrade(symbolToSell);
80
-//        }
81
-//     }
82 59
 
83 60
 //--- create timer
84 61
    EventSetMillisecondTimer(1000);
@@ -121,23 +98,32 @@ void OnTimer()
121 98
 
122 99
    string symbolToBuy = getSymbolWithLowestAsk();
123 100
    string symbolToSell = getSymbolWithHighestBid();
101
+   int buyTickett = -1, sellTickett = -1;
124 102
 //Print(" Symbol to Buy is: ", symbolToBuy, " Symbol to Sell: ", symbolToSell);
125 103
 
126
-   if(noOfActiveOrdersOfType(POSITION_TYPE_BUY) < maxOpenPositions)
104
+   if(canTradeSymbol(symbolToBuy, symbolToSell, POSITION_TYPE_BUY, POSITION_TYPE_SELL))
127 105
      {
128
-      if(symbolToBuy != NULL && symbolToBuy != "")
106
+      if(noOfActiveOrdersOfType(POSITION_TYPE_BUY) < maxOpenPositions)
129 107
         {
130
-         placeBuyTrade(symbolToBuy);
108
+         if(symbolToBuy != NULL && symbolToBuy != "")
109
+           {
110
+            buyTickett = placeBuyTrade(symbolToBuy);
111
+           }
131 112
         }
132
-     }
133 113
 
134
-   if(noOfActiveOrdersOfType(POSITION_TYPE_SELL) < maxOpenPositions)
135
-     {
136
-      if(symbolToSell != NULL && symbolToSell != "")
114
+      if(noOfActiveOrdersOfType(POSITION_TYPE_SELL) < maxOpenPositions)
137 115
         {
138
-         placeSellTrade(symbolToSell);
116
+         if(symbolToSell != NULL && symbolToSell != "")
117
+           {
118
+            sellTickett = placeSellTrade(symbolToSell);
119
+           }
139 120
         }
140 121
      }
122
+
123
+   if(buyTickett != -1 && sellTickett != -1)
124
+     {
125
+      addToStructure(buyTickett, sellTickett, symbolToBuy, symbolToSell);
126
+     }
141 127
   }
142 128
 //+------------------------------------------------------------------+
143 129
 //|                                                                  |
@@ -160,7 +146,7 @@ bool newBar()
160 146
 //+------------------------------------------------------------------+
161 147
 //|                                                                  |
162 148
 //+------------------------------------------------------------------+
163
-void placeBuyTrade(string symbol)
149
+int placeBuyTrade(string symbol)
164 150
   {
165 151
 
166 152
    double ask = SymbolInfoDouble(symbol, SYMBOL_ASK);
@@ -169,16 +155,18 @@ void placeBuyTrade(string symbol)
169 155
    if(trade.PositionOpen(symbol, ORDER_TYPE_BUY, lotSize, ask, buySL, buyTP, "Buy Trade Placed"))
170 156
      {
171 157
       Print("Buy Trade Placed on ", symbol, ": ", trade.ResultOrder());
158
+      return (int)trade.ResultOrder();
172 159
      }
173 160
    else
174 161
      {
175 162
       Print("Error in placing Buy on ", symbol, ": ", GetLastError());
176 163
      }
164
+   return 0;
177 165
   }
178 166
 //+------------------------------------------------------------------+
179 167
 //|                                                                  |
180 168
 //+------------------------------------------------------------------+
181
-void placeSellTrade(string symbol)
169
+int placeSellTrade(string symbol)
182 170
   {
183 171
 
184 172
    double bid = SymbolInfoDouble(symbol, SYMBOL_BID);
@@ -187,11 +175,13 @@ void placeSellTrade(string symbol)
187 175
    if(trade.PositionOpen(symbol, ORDER_TYPE_SELL, lotSize, bid, sellSL, sellTP, "Sell Trade Placed"))
188 176
      {
189 177
       Print("Sell Trade Placed on ", symbol, ": ", trade.ResultOrder());
178
+      return (int)trade.ResultOrder();
190 179
      }
191 180
    else
192 181
      {
193 182
       Print("Error in placing Sell on ", symbol, ": ", GetLastError());
194 183
      }
184
+   return 0;
195 185
   }
196 186
 //+------------------------------------------------------------------+
197 187
 //|                                                                  |
@@ -395,7 +385,7 @@ void removeFromStruct()
395 385
       bool buyPresent = false;
396 386
       bool sellPresent = false;
397 387
 
398
-      if(newTradeStore[i].buyTicket !=-1 || newTradeStore[i].sellTicket !=-1)
388
+      if(newTradeStore[i].buyTicket !=-1 && newTradeStore[i].sellTicket !=-1)
399 389
         {
400 390
          for(int j = PositionsTotal()-1; j>=0; j--)
401 391
            {
@@ -413,37 +403,43 @@ void removeFromStruct()
413 403
               }
414 404
            }
415 405
 
416
-         for(int j = OrdersTotal()-1; j>=0; j--)
406
+         if(!buyPresent && !sellPresent)
417 407
            {
418
-            ulong ticket = OrderGetTicket(j);
419
-            if(OrderSelect(ticket))
420
-              {
421
-               if(ticket == newTradeStore[i].buyTicket)
422
-                 {
423
-                  buyPresent = true;
424
-                 }
425
-               if(ticket == newTradeStore[i].sellTicket)
426
-                 {
427
-                  sellPresent = true;
428
-                 }
429
-              }
430
-           }
431
-
432
-         if(!buyPresent)
433
-           {
434
-            Print("Buy ticket closed: ", newTradeStore[i].buyTicket);
408
+            Print("Buy ticket closed so removed from struct: ", newTradeStore[i].buyTicket);
435 409
             newTradeStore[i].buyTicket = -1;
436 410
             newTradeStore[i].buySymbol = "";
437
-           }
438
-         if(!sellPresent)
439
-           {
440
-            Print("Sell ticket closed: ", newTradeStore[i].sellTicket);
411
+
412
+            Print("Sell ticket closed so removed from struct: ", newTradeStore[i].sellTicket);
441 413
             newTradeStore[i].sellTicket = -1;
442 414
             newTradeStore[i].sellSymbol = "";
443 415
            }
416
+        }
417
+     }
418
+  }
419
+//+------------------------------------------------------------------+
420
+//|                                                                  |
421
+//+------------------------------------------------------------------+
422
+bool canTradeSymbol(string symbol1, string symbol2, ENUM_POSITION_TYPE type1, ENUM_POSITION_TYPE type2)
423
+  {
424
+   for(int i = 0; i < MaxOrders; i++)
425
+     {
444 426
 
427
+      if(newTradeStore[i].buyTicket != -1 && newTradeStore[i].sellTicket != -1)
428
+        {
429
+         if(newTradeStore[i].buySymbol == symbol1 && newTradeStore[i].sellSymbol == symbol2)
430
+           {
431
+            if(type1 == POSITION_TYPE_BUY && type2 == POSITION_TYPE_SELL)
432
+              {
433
+               Print("Already Have Buy and Sell on this Pair");
434
+               Print("----------- Symbol Buy: ", symbol1, " Symbol Sell: ", symbol2, " Buy Ticket: ", newTradeStore[i].buyTicket,
435
+                     " Sell Ticket: ", newTradeStore[i].sellTicket," ---------------");
436
+               return false;
437
+              }
438
+           }
445 439
         }
440
+
446 441
      }
442
+   return true;
447 443
   }
448 444
 //+------------------------------------------------------------------+
449 445
 //|                                                                  |