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

Ticket : 4797 Multi Pair Entry Bot

1) Works on all Pairs in Market watch
2) Now Combination Logic Added
faiz ali месяцев назад: 6
Родитель
Сommit
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
    getSymbolsFromMarketWatch();
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
 //--- create timer
60
 //--- create timer
84
    EventSetMillisecondTimer(1000);
61
    EventSetMillisecondTimer(1000);
@@ -121,23 +98,32 @@ void OnTimer()
121
 
98
 
122
    string symbolToBuy = getSymbolWithLowestAsk();
99
    string symbolToBuy = getSymbolWithLowestAsk();
123
    string symbolToSell = getSymbolWithHighestBid();
100
    string symbolToSell = getSymbolWithHighestBid();
101
+   int buyTickett = -1, sellTickett = -1;
124
 //Print(" Symbol to Buy is: ", symbolToBuy, " Symbol to Sell: ", symbolToSell);
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
    double ask = SymbolInfoDouble(symbol, SYMBOL_ASK);
152
    double ask = SymbolInfoDouble(symbol, SYMBOL_ASK);
@@ -169,16 +155,18 @@ void placeBuyTrade(string symbol)
169
    if(trade.PositionOpen(symbol, ORDER_TYPE_BUY, lotSize, ask, buySL, buyTP, "Buy Trade Placed"))
155
    if(trade.PositionOpen(symbol, ORDER_TYPE_BUY, lotSize, ask, buySL, buyTP, "Buy Trade Placed"))
170
      {
156
      {
171
       Print("Buy Trade Placed on ", symbol, ": ", trade.ResultOrder());
157
       Print("Buy Trade Placed on ", symbol, ": ", trade.ResultOrder());
158
+      return (int)trade.ResultOrder();
172
      }
159
      }
173
    else
160
    else
174
      {
161
      {
175
       Print("Error in placing Buy on ", symbol, ": ", GetLastError());
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
    double bid = SymbolInfoDouble(symbol, SYMBOL_BID);
172
    double bid = SymbolInfoDouble(symbol, SYMBOL_BID);
@@ -187,11 +175,13 @@ void placeSellTrade(string symbol)
187
    if(trade.PositionOpen(symbol, ORDER_TYPE_SELL, lotSize, bid, sellSL, sellTP, "Sell Trade Placed"))
175
    if(trade.PositionOpen(symbol, ORDER_TYPE_SELL, lotSize, bid, sellSL, sellTP, "Sell Trade Placed"))
188
      {
176
      {
189
       Print("Sell Trade Placed on ", symbol, ": ", trade.ResultOrder());
177
       Print("Sell Trade Placed on ", symbol, ": ", trade.ResultOrder());
178
+      return (int)trade.ResultOrder();
190
      }
179
      }
191
    else
180
    else
192
      {
181
      {
193
       Print("Error in placing Sell on ", symbol, ": ", GetLastError());
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
       bool buyPresent = false;
385
       bool buyPresent = false;
396
       bool sellPresent = false;
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
          for(int j = PositionsTotal()-1; j>=0; j--)
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
             newTradeStore[i].buyTicket = -1;
409
             newTradeStore[i].buyTicket = -1;
436
             newTradeStore[i].buySymbol = "";
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
             newTradeStore[i].sellTicket = -1;
413
             newTradeStore[i].sellTicket = -1;
442
             newTradeStore[i].sellSymbol = "";
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
 //|                                                                  |