#6 Pending orders added

Açık
huzaifa.hayat MQL-Development/master içindeki MQL-Development/updation/pending-orders işlemelerini 2 ile birleştirmek istiyor
2 değiştirilmiş dosya ile 214 ekleme ve 69 silme
  1. BIN
      blTelegramToMT4.ex4
  2. 214 69
      blTelegramToMT4.mq4

BIN
blTelegramToMT4.ex4


+ 214 - 69
blTelegramToMT4.mq4

@@ -5,7 +5,7 @@
5 5
 //+------------------------------------------------------------------+
6 6
 #property copyright "Copyright 2025, MQL Development"
7 7
 #property link      "https://www.mqldevelopment.com/"
8
-#property version   "1.1"
8
+#property version   "2.0"
9 9
 #property strict
10 10
 
11 11
 #define buy "buy"
@@ -395,6 +395,7 @@ void execute_functionality_on_new_message(int i)
395 395
             int ticket = -1;
396 396
 
397 397
             message(result,message,group_message_id,ticket);
398
+            pendingMessage(result,message,group_message_id,ticket);
398 399
 
399 400
             addtoMessageStructure(group_message_id,message,ticket);
400 401
 
@@ -448,102 +449,246 @@ void message(string &result[], string message, int message_id,int & tickt)
448 449
    if(ArraySize(result) >= 1)
449 450
      {
450 451
       StringSplit(result[0], ' ', lineOne);
451
-      if(((StringFind(result[0], "buy", 0) != -1) || (StringFind(result[0], "sell", 0) != -1)))
452
-        {
453
-
454
-         for(int i=0; i<ArraySize(lineOne); i++)
452
+      if(StringFind(result[0], "limit", 0) == -1 && StringFind(result[0], "stop", 0) == -1)
453
+         if(((StringFind(result[0], "buy", 0) != -1) || (StringFind(result[0], "sell", 0) != -1)))
455 454
            {
456
-            if(HasAlphanumeric(lineOne[i]))
455
+            Print(" ------------------------------- Active Message ---------------------------------- ");
456
+            for(int i=0; i<ArraySize(lineOne); i++)
457 457
               {
458
-               ArrayResize(lineOne,ArraySize(lineOne)+1);
459
-               lineOne[lineIndex] = lineOne[i];
460
-               Print("Direction and Symbol: ", lineOne[lineIndex], " index is: ", lineIndex);
458
+               if(HasAlphanumeric(lineOne[i]))
459
+                 {
460
+                  ArrayResize(lineOne,ArraySize(lineOne)+1);
461
+                  lineOne[lineIndex] = lineOne[i];
462
+                  Print("Direction and Symbol: ", lineOne[lineIndex], " index is: ", lineIndex);
463
+
464
+                  if(lineOne[lineIndex] == buy || lineOne[lineIndex] == sell)
465
+                    {
466
+                     direction = lineOne[lineIndex];
467
+                     direction_index = lineIndex;
468
+                     //Print(" Direction is: ", direction, " Direction Index: ", direction_index);
469
+                    }
470
+                  lineIndex++;
471
+                 }
472
+              }
473
+            if(ArraySize(lineOne) >= 2)
474
+              {
475
+               if(direction_index == 0)
476
+                 {
477
+                  symbol = lineOne[1];
478
+                  StringToUpper(symbol);
461 479
 
462
-               if(lineOne[lineIndex] == buy || lineOne[lineIndex] == sell)
480
+                  //Print(" This is Message format One (1). Where Direction is: ", direction, " Symbol: ", symbol);
481
+                 }
482
+               else
483
+                  if(direction_index > 0)
484
+                    {
485
+                     symbol = lineOne[0];
486
+                     StringToUpper(symbol);
487
+
488
+                     //Print(" This is Message format One (1). Where Direction is: ", direction, " Symbol: ", symbol);
489
+                    }
490
+              }
491
+            symbol = symbolMapping(symbol);
492
+
493
+            double sl = 0;
494
+            double tp = 0; // = result[0];
495
+            for(int i=0 ; i < ArraySize(result); i++)
496
+              {
497
+               // result[i] = StringTrimLeft(result[i]);
498
+               // result[i] = StringTrimRight(result[i]);
499
+               // Print("Result : ", result[i], " index is: ", i);
500
+               if((StringFind(result[i], "sl", 0) != -1))
501
+                 {
502
+                  string tempSl[];
503
+                  StringReplace(result[i],":", " ");
504
+                  result[i] = trimString(result[i]);
505
+                  result[i] = spaceRemove(result[i]);
506
+                  //Print(" Sl String: ", result[i]);
507
+                  StringSplit(result[i], ' ', tempSl);
508
+                  if(ArraySize(tempSl) >= 2)
509
+                     sl = (double) tempSl[ArraySize(tempSl) - 1];
510
+                  Print("Sl : ", sl);
511
+                 }
512
+               if((StringFind(result[i], "tp", 0) != -1))
463 513
                  {
464
-                  direction = lineOne[lineIndex];
465
-                  direction_index = lineIndex;
466
-                  //Print(" Direction is: ", direction, " Direction Index: ", direction_index);
514
+                  Print("Tp : ", result[i], " index is: ", i);
515
+                  string tempTp[];
516
+                  StringReplace(result[i],":", " ");
517
+                  result[i] = trimString(result[i]);
518
+                  result[i] = spaceRemove(result[i]);
519
+                  Print("Tp After String Replace : ", result[i], " index is: ", i);
520
+                  StringSplit(result[i], ' ', tempTp);
521
+                  //double tp = (double) tempTp[1];
522
+                  for(int j=0 ; j < ArraySize(tempTp); j++)
523
+                    {
524
+                     Print(" Data is: ", tempTp[j]);
525
+                    }
526
+                  if(ArraySize(tempTp) >= 2)
527
+                     tp = (double) tempTp[ArraySize(tempTp) - 1];
528
+                  Print("Tp : ", tp);
467 529
                  }
468
-               lineIndex++;
530
+              }
531
+            Print("Side:", direction, " Symbol: ", symbol, " Tp: ", tp, " Sl: ", sl, " Message Id: ", message_id);
532
+
533
+            if(direction == buy)
534
+              {
535
+               tickt = placeBuyTrade(symbol, OP_BUY, SymbolInfoDouble(symbol, SYMBOL_ASK), tp, sl, message_id, lotSize);
536
+              }
537
+
538
+            if(direction == sell)
539
+              {
540
+               tickt = placeSellTrade(symbol, OP_SELL, SymbolInfoDouble(symbol, SYMBOL_BID), tp, sl, message_id, lotSize);
469 541
               }
470 542
            }
471
-         if(ArraySize(lineOne) >= 2)
543
+     }
544
+  }
545
+//+------------------------------------------------------------------+
546
+//|                                                                  |
547
+//+------------------------------------------------------------------+
548
+void pendingMessage(string &result[], string message, int message_id,int & tickt)
549
+  {
550
+   string lineOne[]; // = result[0];
551
+   int lineIndex = 0;
552
+   string direction = "";
553
+   int direction_index = -1;
554
+   string symbol = "";
555
+
556
+   if(ArraySize(result) >= 1)
557
+     {
558
+      StringSplit(result[0], ' ', lineOne);
559
+      if(StringFind(result[0], "limit", 0) != -1 || StringFind(result[0], "stop", 0) != -1)
560
+         if(((StringFind(result[0], "buy", 0) != -1) || (StringFind(result[0], "sell", 0) != -1)))
472 561
            {
473
-            if(direction_index == 0)
562
+            Print(" ------------------------------- Pending Message ---------------------------------- ");
563
+            for(int i=0; i<ArraySize(lineOne); i++)
474 564
               {
475
-               symbol = lineOne[1];
476
-               StringToUpper(symbol);
565
+               if(HasAlphanumeric(lineOne[i]))
566
+                 {
567
+                  ArrayResize(lineOne,ArraySize(lineOne)+1);
568
+                  lineOne[lineIndex] = lineOne[i];
569
+                  Print("Direction and Symbol: ", lineOne[lineIndex], " index is: ", lineIndex);
477 570
 
478
-               //Print(" This is Message format One (1). Where Direction is: ", direction, " Symbol: ", symbol);
571
+                  if(lineOne[lineIndex] == buy || lineOne[lineIndex] == sell)
572
+                    {
573
+                     direction = lineOne[lineIndex];
574
+                     direction_index = lineIndex;
575
+                     //Print(" Direction is: ", direction, " Direction Index: ", direction_index);
576
+                    }
577
+                  lineIndex++;
578
+                 }
479 579
               }
480
-            else
481
-               if(direction_index > 0)
580
+            if(ArraySize(lineOne) >= 2)
581
+              {
582
+               if(direction_index == 0)
482 583
                  {
483
-                  symbol = lineOne[0];
584
+                  symbol = lineOne[1];
484 585
                   StringToUpper(symbol);
485 586
 
486 587
                   //Print(" This is Message format One (1). Where Direction is: ", direction, " Symbol: ", symbol);
487 588
                  }
488
-           }
489
-         symbol = symbolMapping(symbol);
589
+               else
590
+                  if(direction_index > 0)
591
+                    {
592
+                     symbol = lineOne[0];
593
+                     StringToUpper(symbol);
490 594
 
491
-         double sl = 0;
492
-         double tp = 0; // = result[0];
493
-         for(int i=0 ; i < ArraySize(result); i++)
494
-           {
495
-            // result[i] = StringTrimLeft(result[i]);
496
-            // result[i] = StringTrimRight(result[i]);
497
-            // Print("Result : ", result[i], " index is: ", i);
498
-            if((StringFind(result[i], "sl", 0) != -1))
595
+                     //Print(" This is Message format One (1). Where Direction is: ", direction, " Symbol: ", symbol);
596
+                    }
597
+              }
598
+            symbol = symbolMapping(symbol);
599
+
600
+            double price = 0;
601
+            double sl = 0;
602
+            double tp = 0; // = result[0];
603
+            for(int i=0 ; i < ArraySize(result); i++)
604
+              {
605
+               // result[i] = StringTrimLeft(result[i]);
606
+               // result[i] = StringTrimRight(result[i]);
607
+               // Print("Result : ", result[i], " index is: ", i);
608
+               if((StringFind(result[i], "open", 0) != -1))
609
+                 {
610
+                  string tempOpen[];
611
+                  StringReplace(result[i],":", " ");
612
+                  result[i] = trimString(result[i]);
613
+                  result[i] = spaceRemove(result[i]);
614
+                  //Print(" Sl String: ", result[i]);
615
+                  StringSplit(result[i], ' ', tempOpen);
616
+                  if(ArraySize(tempOpen) >= 2)
617
+                     price = (double) tempOpen[ArraySize(tempOpen) - 1];
618
+                  Print("Open : ", price);
619
+                 }
620
+               if((StringFind(result[i], "sl", 0) != -1))
621
+                 {
622
+                  string tempSl[];
623
+                  StringReplace(result[i],":", " ");
624
+                  result[i] = trimString(result[i]);
625
+                  result[i] = spaceRemove(result[i]);
626
+                  //Print(" Sl String: ", result[i]);
627
+                  StringSplit(result[i], ' ', tempSl);
628
+                  if(ArraySize(tempSl) >= 2)
629
+                     sl = (double) tempSl[ArraySize(tempSl) - 1];
630
+                  Print("Sl : ", sl);
631
+                 }
632
+               if((StringFind(result[i], "tp", 0) != -1))
633
+                 {
634
+                  Print("Tp : ", result[i], " index is: ", i);
635
+                  string tempTp[];
636
+                  StringReplace(result[i],":", " ");
637
+                  result[i] = trimString(result[i]);
638
+                  result[i] = spaceRemove(result[i]);
639
+                  Print("Tp After String Replace : ", result[i], " index is: ", i);
640
+                  StringSplit(result[i], ' ', tempTp);
641
+                  //double tp = (double) tempTp[1];
642
+                  for(int j=0 ; j < ArraySize(tempTp); j++)
643
+                    {
644
+                     Print(" Data is: ", tempTp[j]);
645
+                    }
646
+                  if(ArraySize(tempTp) >= 2)
647
+                     tp = (double) tempTp[ArraySize(tempTp) - 1];
648
+                  Print("Tp : ", tp);
649
+                 }
650
+              }
651
+            ENUM_ORDER_TYPE pending_side = 0;
652
+            if(direction == buy)
499 653
               {
500
-               string tempSl[];
501
-               StringReplace(result[i],":", " ");
502
-               result[i] = trimString(result[i]);
503
-               result[i] = spaceRemove(result[i]);
504
-               //Print(" Sl String: ", result[i]);
505
-               StringSplit(result[i], ' ', tempSl);
506
-               if(ArraySize(tempSl) >= 2)
507
-                  sl = (double) tempSl[1];
508
-               Print("Sl : ", sl);
654
+               if(price > SymbolInfoDouble(symbol, SYMBOL_ASK))
655
+                 {
656
+                  pending_side = OP_BUYSTOP;
657
+                 }
658
+               else
659
+                 {
660
+                  pending_side = OP_BUYLIMIT;
661
+                 }
509 662
               }
510
-            if((StringFind(result[i], "tp", 0) != -1))
663
+            if(direction == sell)
511 664
               {
512
-               Print("Tp : ", result[i], " index is: ", i);
513
-               string tempTp[];
514
-               StringReplace(result[i],":", " ");
515
-               result[i] = trimString(result[i]);
516
-               result[i] = spaceRemove(result[i]);
517
-               Print("Tp After String Replace : ", result[i], " index is: ", i);
518
-               StringSplit(result[i], ' ', tempTp);
519
-               //double tp = (double) tempTp[1];
520
-               for(int j=0 ; j < ArraySize(tempTp); j++)
665
+               if(price < SymbolInfoDouble(symbol, SYMBOL_BID))
521 666
                  {
522
-                  Print(" Data is: ", tempTp[j]);
667
+                  pending_side = OP_SELLSTOP;
668
+                 }
669
+               else
670
+                 {
671
+                  pending_side = OP_SELLLIMIT;
523 672
                  }
524
-               if(ArraySize(tempTp) >= 2)
525
-                  tp = (double) tempTp[1];
526
-               Print("Tp : ", tp);
527 673
               }
528
-           }
529
-         Print("Side:", direction, " Symbol: ", symbol, " Tp: ", tp, " Sl: ", sl, " Message Id: ", message_id);
674
+            Print("Side:", direction, " Type: ", pending_side, " Symbol: ", symbol, " Tp: ", tp, " Sl: ", sl, " Message Id: ", message_id);
530 675
 
531
-         if(direction == buy)
532
-           {
533
-            tickt = placeBuyTrade(symbol, tp, sl, message_id, lotSize);
534
-           }
676
+            if(direction == buy)
677
+              {
678
+               tickt = placeBuyTrade(symbol, pending_side, price, tp, sl, message_id, lotSize);
679
+              }
535 680
 
536
-         if(direction == sell)
537
-           {
538
-            tickt = placeSellTrade(symbol, tp, sl, message_id, lotSize);
681
+            if(direction == sell)
682
+              {
683
+               tickt = placeSellTrade(symbol, pending_side, price, tp, sl, message_id, lotSize);
684
+              }
539 685
            }
540
-        }
541 686
      }
542 687
   }
543 688
 //+------------------------------------------------------------------+
544 689
 //|                                                                  |
545 690
 //+------------------------------------------------------------------+
546
-int placeBuyTrade(string symbol,double tp,double sl, int messageId, double lot_size)
691
+int placeBuyTrade(string symbol, ENUM_ORDER_TYPE orderType, double priceIs,double tp,double sl, int messageId, double lot_size)
547 692
   {
548 693
 
549 694
    double ask = SymbolInfoDouble(symbol,SYMBOL_ASK);
@@ -552,7 +697,7 @@ int placeBuyTrade(string symbol,double tp,double sl, int messageId, double lot_s
552 697
    double buyTp  = tp;
553 698
 
554 699
 
555
-   int ticket = OrderSend(symbol, OP_BUY, lot_size, ask, 3, buySl, buyTp, "Buy Trade Placed.", magic_no, 0, clrBlue);
700
+   int ticket = OrderSend(symbol, orderType, lot_size, priceIs, 3, buySl, buyTp, "Buy Trade Placed.", magic_no, 0, clrBlue);
556 701
    Print("Buy order Print: Stop Loss: ", buySl, " Take profit: ", buyTp);
557 702
    if(ticket < 0)
558 703
      {
@@ -568,7 +713,7 @@ int placeBuyTrade(string symbol,double tp,double sl, int messageId, double lot_s
568 713
 //+------------------------------------------------------------------+
569 714
 //|                                                                  |
570 715
 //+------------------------------------------------------------------+
571
-int placeSellTrade(string symbol,double tp,double sl, int messageId, double lot_size)
716
+int placeSellTrade(string symbol, ENUM_ORDER_TYPE orderType, double priceIs,double tp,double sl, int messageId, double lot_size)
572 717
   {
573 718
 
574 719
    double ask = SymbolInfoDouble(symbol,SYMBOL_ASK);
@@ -576,7 +721,7 @@ int placeSellTrade(string symbol,double tp,double sl, int messageId, double lot_
576 721
    double sellSl = sl;
577 722
    double sellTp = tp;
578 723
 
579
-   int ticket = OrderSend(symbol, OP_SELL, lot_size, bid, 3, sellSl, sellTp, "Sell Trade Placed.", magic_no, 0, clrRed);
724
+   int ticket = OrderSend(symbol, orderType, lot_size, priceIs, 3, sellSl, sellTp, "Sell Trade Placed.", magic_no, 0, clrRed);
580 725
    if(ticket < 0)
581 726
      {
582 727
       Print("Sell Order Failed ", GetLastError());