Visual_Handle_Tranning_51_4





//+------------------------------------------------------------------+
//|                                       Visual_Handle_Tranning.mq4 |
//+------------------------------------------------------------------+
//|  b - îòêðûòü ïîçèöèþ Buy;                                        |
//|  s - îòêðûòü ïîçèöèþ Sell;                                       |
//|  "ñòðåëêà ââåðõ" - çàêðûòü âñå BUY;                              |
//|  "ñòðåëêà âíèç" - çàêðûòü âñå SELL;                              |
//|  t - âêëþ÷àåò òðåéëèíã ñòîï îáùèé;                               |
//|  r - âûêëþ÷àåò òðåéëèíã ñòîï;                                    |
//|  d - óäàëåíèå âñåõ îòëîæåííûõ îðäåðîâ.                           |
//|    Äëÿ âûñòàâëåíèÿ îòëîæåííîãî îðäåðà ìûøêîé âûáèðàåì èç ìåíþ    |
//|  çíà÷êîâ "Ñòðåëî÷êó ââåðõ" äëÿ Buy-åâ è ùåëêàåì â òîì ìåñòå,     |
//|  ãäå ïëàíèðóåì ïîñòàâèòü îðäåð. Åñëè ùåëêíóòü âûøå öåíû, òî      |
//|  áóäåò BuyStop, åñëè íèæå - áóäåò BuyLimit.                      |
//|  äëÿ Sell-îâ, ñîîòâåòñòâåííî, çíà÷åê "ñòðåëî÷êà âíèç".           |
//|              Ìîäèôèêàöèÿ îòäåëüíûõ îðäåðîâ:                      |
//|  Äâîéíûì ùåë÷êîì ìûøè âûäåëÿåì íóæíûé íàì çíà÷åê-îðäåð           |
//|  äàëåå, ùåëêàåì ïî íåìó ïðàâîé êëàâèøåé ìûøè                     |
//|  è âûáèðàåì ñâîéñòâà Arrow.                                      |
//|  Äàëåå, ìåíÿåì â ïîëå "Îïèñàíèå" íóæíûå ïàðàìåòðû îòäåëüíîãî     |
//|  îðäåðà.                                                         |
//|  Ìîæíî ìåíÿòü SL, TP, à òàêæå çàêðûòü ðûíî÷íûé îðäåð             |
//|  èëè óäàëèòü îòëîæåííûé Âìåñòî EMPTY ïèøåì close èëè del         |
//|   ÂÀÆÍÎ ñîõðàíèòü ïðîáåëû - ýòî ðàçäåëèòåëè !!!                  |
//|  Ôîðìàò ïîëÿ "Îïèñàíèå", ðàçäåëèòåëü-"ÏÐÎÁÅË!!!":                |
//|  |  1   |  2   | 3 |  4   | 5 |  6   |   7    |  8  |            |
//|  Price= 1.2565 SL= 1.2765 TP= 1.2265 Êîìàíäà= close              |
//|  |      |      |   |      |   |      |        |     |            |
//|  Êîìàíäà íà çàêðûòèå ðûíî÷íîãî îðäåðà - close                    |
//|  Óäàëåíèå îòëîæåííîãî - del                                      |
//+------------------------------------------------------------------+

#property copyright "Copyright © 2005, klot"
#property link      "klot@mail.ru"
#define MAGICEXP 00000001
//----
#include <stdlib.mqh>
#include <WinUser32.mqh>
//----
#import "IdleLib.dll"
int GetLastKeyWP();
int GetLastMouseWP();
int IdleLibInit();
int IdleLibUnInit();
string GetActiveWndName();
#import
//----
extern double Lots = 0.1;
extern double TrailingStop = 15.0;
//----
static datetime lastsd;
static int tral = 0;
//color clModifyBuy = Aqua;
//color clModifySell = Magenta;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
// èíèöèàëèçèðóåì Dll äëÿ ïåðåõâàòà ñîáûòèé 
   IdleLibInit();
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
// äåèíèöèàëèçèðóåì Dll äëÿ ïåðåõâàòà ñîáûòèé 
   IdleLibUnInit();
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   if(IsDllsAllowed() == false)
     {
       Print("Âûçîâ DLL-ôóíêöèé èç áèáëèîòåê íåâîçìîæåí. Ýêñïåðò íå ìîæåò âûïîëíÿòüñÿ.");
       return(0);
     }
   if(IsLibrariesAllowed() == false)
     {
       Print("Áèáëèîòå÷íûå âûçîâû çàïðåùåíû. Ýêñïåðò íå ìîæåò âûïîëíÿòüñÿ.");
       return(0);
     }
   if(!IsTesting()) 
     { 
       Print("Ýêñïåðò çàïóùåí íå â ðåæèìå òåñòèðîâàíèÿ"); 
       return(0);
     }
   if(IsOptimization())
     { 
       Print("Ýêñïåðò çàïóùåí â ðåæèìå îïòèìèçàöèè"); 
       return(0);
     } 
// óñòðàíåíèå äðåáåçãà êëàâèø
   static int trigger = 0; 
// Îïðàøèâàåì êîä ïîñëåäíåé íàæàòîé êëàâèøè
   int lastkey = GetLastKeyWP(); 
// Èìÿ îêíà Metatrader, ãäå ïðîèçîøëî ñîáûòèå
   string lastwnd = GetActiveWndName();
//----
   if((lastkey != 0) && (lastwnd != ""))
     {
       //óñòðàíåíèå äðåáåçãà êëàâèø
       if(trigger != lastkey) 
           trigger = lastkey; 
       else 
         { 
           lastkey = 0; 
           trigger = 0; 
         }
       //---
       switch(lastkey)
         {
           case 66: buy_open(0, 0); 
                    break;
           case 83: sell_open(0, 0); 
                    break;
           case 38: close_order(1); 
                    break;
           case 40: close_order(-1); 
                    break;
           case 84: if(tral == 0) 
                        tral = 1; 
                    Comment("Tralling âêëþ÷åí = ", TrailingStop); 
                    break;
           case 82: if(tral == 1 ) 
                        tral = 0; 
                    Comment("Tralling âûêëþ÷åí"); 
                    break;
           case 68: delete_pending_all(); 
                    break;
           //case ..: ìîæíî ïðèäóìàòü ëþáóþ ñîáñòâåííþ ôè÷ó
           default : break;
         }
     }
   send_pending();
   managers_market_orders();
//----
   if(lastkey != 0)
       Print(" "+lastkey);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Óïðàâëåíèå ðûíî÷íûìè îðäåðàìè (èçìåíåíèå SL,TP,price)            |
//| Âñå ïèñàòü â Ñâîéñòâàõ Arrow, â ïîëå "Îïèñàíèå"                  |
//| Ôîðìàò ïîëÿ "Îïèñàíèå", ðàçäåëèòåëü-"ÏÐÎÁÅË!!!":                 |
//| |  1   |  2   | 3 |  4   | 5 |  6   |   7    |  8  |             |
//|  Price= 1.2565 SL= 1.2765 TP= 1.2265 Êîìàíäà= close              |
//| |      |      |   |      |   |      |        |     |             |
//| Êîìàíäà íà çàêðûòèå ðûíî÷íîãî îðäåðà - close                     |
//| Óäàëåíèå îòëîæåííîãî - del                                       |
//|    
//+------------------------------------------------------------------+
void managers_market_orders()
  {     
   string desc, name, exec, _EMPTY = "EMPTY";
   string array_param[];
   int count, arrow_code, ticket, pos, nGetLastError;
   double price, sl, tp;
   int TrailingStep = 5;
   int obj_total = ObjectsTotal();
//----
   if(obj_total == 0) 
       return;
//----
   for(int i = obj_total - 1; i >= 0; i--)
     {
       name = ObjectName(i);
       //----
       if(ObjectType(name) != OBJ_ARROW) 
           continue;
       arrow_code = ObjectGet(name, OBJPROP_ARROWCODE);
       if(arrow_code != 1 && arrow_code != 2) 
           continue;
       else
         {
           //Âû÷èñëÿåì òèêåò îðäåðà ïî çíà÷êó Arrow 
           pos = StringFind(name, " ", 0);
           ticket = StrToInteger(StringSubstr(name, 1, pos)); 
           //Print("ticket= ",ticket);
           //---
           if(OrderSelect(ticket, SELECT_BY_TICKET) == true)
             {
               if(OrderCloseTime()!=0) 
                   continue;
               //×èòàåì ïîëå Îïèñàíèå â ñâîéñòâàõ Arrow
               desc = ObjectDescription(name);
               // Åñëè ñòðî÷êà ïóñòàÿ çàïîëíèì íà÷àëüíûìè çíà÷åíèÿìè
               if(StringLen(desc) == 0) 
                 { 
                   desc = StringConcatenate("Price= ", OrderOpenPrice(), " SL= ", 
                                            OrderStopLoss(), " TP= ", OrderTakeProfit(),
                                            " Êîìàíäà= ",_EMPTY); 
                   ObjectSetText(name, desc); 
                 }
               // çàïîëíåíèå ìàññèâà ïàðàìåòðîâ îðäåðà
               count = StrSplit(desc, array_param, " ");
               if(count != 8)
                 {
                   desc = StringConcatenate("Price= ", OrderOpenPrice(), " SL= ", 
                                            OrderStopLoss(), " TP= ", OrderTakeProfit(),
                                            " Êîìàíäà= ",_EMPTY);
                   ObjectSetText(name, desc);
                   Print(" Îøèáêà â ôîðìàòå ïîëÿ Îèñàíèå. Ïîëå âîñòàíîâëåíî!!!");
                 }
               else
                 {
                   price = StrToDouble(array_param[1]);
                   sl = StrToDouble(array_param[3]);
                   tp = StrToDouble(array_param[5]);
                   exec = array_param[7];
                 }
               //---
               if(OrderType()==OP_BUY)
                 {
                   if(TrailingStop > MarketInfo(Symbol(), MODE_STOPLEVEL) && tral == 1)
                     {
                       if(Bid - OrderOpenPrice() > TrailingStop*Point)
                         {
                           if(OrderStopLoss() < Bid - (TrailingStop + TrailingStep - 1)*Point)
                             {
                               sl = Bid - TrailingStop*Point;
                               desc = StringConcatenate("Price= ", OrderOpenPrice(), " SL= ", 
                                                        sl, " TP= ", OrderTakeProfit(),
                                                        " Êîìàíäà= ", _EMPTY);
                               ObjectSetText(name, desc);
                             }
                         }
                     }
                   //---
                   if(sl != 0 && sl != OrderStopLoss()) 
                       ModifyStopLoss(sl);
                   if(tp != 0 && tp != OrderTakeProfit()) 
                       ModifyTakeProfit(tp);
                   //---
                   if(exec == "close") 
                     {
                       RefreshRates();
                       OrderClose(OrderTicket(), OrderLots(), Bid, 3, Aqua);
                       nGetLastError = GetLastError();
                       if(nGetLastError != 0) 
                       Print("Error closing BUY order : ", ErrorDescription(nGetLastError));
                     }               
                 }
               if(OrderType() == OP_SELL)
                 {
                   if(TrailingStop > MarketInfo(Symbol(), MODE_STOPLEVEL) && tral == 1)
                     {
                       if(OrderOpenPrice() - Ask > TrailingStop*Point)
                         {
                           if(OrderStopLoss() > Ask + (TrailingStop + TrailingStep - 
                              1)*Point || OrderStopLoss() == 0)
                             {
                               sl = Ask + TrailingStop*Point;
                               desc = StringConcatenate("Price= ", OrderOpenPrice(), 
                                            " SL= ", sl, " TP= ", OrderTakeProfit(),
                                            " Êîìàíäà= ",_EMPTY);
                               ObjectSetText(name, desc);
                             }
                         }
                     }
                   //---
                   if(sl != 0 && sl != OrderStopLoss()) 
                       ModifyStopLoss(sl);
                   if(tp != 0 && tp != OrderTakeProfit()) 
                       ModifyTakeProfit(tp);
                   //---
                   if(exec=="close") 
                     {
                       RefreshRates();   
                       OrderClose(OrderTicket(), OrderLots(), Ask, 3, Yellow);
                       nGetLastError = GetLastError();
                       if(nGetLastError != 0)
                           Print("Error closing SELL order : ", 
                                 ErrorDescription(nGetLastError));
                     }
                 }
               if(OrderType() == OP_SELLLIMIT || OrderType() == OP_BUYLIMIT || 
                  OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP)
                 {
                   // åñëè ìûøêîé ïåðåìåñòèëè îðäåð
                   if(NormalizeDouble(ObjectGet(name, OBJPROP_PRICE1), Digits) != price)
                     {
                       price = NormalizeDouble(ObjectGet(name, OBJPROP_PRICE1), Digits);
                       desc = StringConcatenate("Price= ", price, " SL= ", OrderStopLoss(), 
                                              " TP= ", OrderTakeProfit(), " Êîìàíäà= ",
                                              _EMPTY);
                       ObjectSetText(name, desc);
                     }
                   //---
                   if(price != OrderOpenPrice() && MathAbs(price - Ask) > 
                      (MarketInfo(Symbol(), MODE_STOPLEVEL)*Point) )
                     {
                       OrderModify(OrderTicket(), price, OrderStopLoss(), OrderTakeProfit(),
                                   OrderExpiration(),CLR_NONE);
                       nGetLastError = GetLastError();
                       if(nGetLastError != 0)
                           Print("Error closing SELL order : ", 
                                 ErrorDescription(nGetLastError));
                       else 
                           ObjectDelete(name);
                     }
                   //----
                   if(sl != 0 && sl != OrderStopLoss()) 
                       ModifyStopLoss(sl);
                   if(tp != 0 && tp != OrderTakeProfit()) 
                       ModifyTakeProfit(tp);
                   //----
                   if(exec == "del")
                     {
                       OrderDelete(OrderTicket());
                       nGetLastError = GetLastError();
                       if(nGetLastError != 0)
                           Print("Error closing SELL order : ", 
                                 ErrorDescription(nGetLastError));
                     }
                 }
             }
           else  
               Print("OrderSelect() âåðíóë îøèáêó - ", GetLastError());
         }
     }
  }
//+------------------------------------------------------------------+
//| Óñòàíîâêà îòëîæåííûõ îðäåðîâ                                     |
//| ïðîñòî ïåðåòàñêèâàåì çíà÷åê "ñòðåëî÷êà ââåðõ" íà ìåñòî, êóäà     |
//| õîòèì ïîñòàâèòü îòëîæåííûé îðäåð. Åñëè âûøå öåíû áóäåò ByuStop   |
//| åñëè íèæå öåíû - áóäåò BuyLimit. Äëÿ Sel-îâ - ñîîòâåòñòâåííî     |
//| çíà÷åê "ñòðåëî÷êà âíèç"                                          |
//+------------------------------------------------------------------+
void send_pending()
  {
   int arrow_code;
   string name;
   double price;
   int obj_total = ObjectsTotal();
//----
   for(int i = 0; i < obj_total; i++)
     {
       name = ObjectName(i);
       if(ObjectType(name) != OBJ_ARROW) 
           continue;
       arrow_code = ObjectGet(name, OBJPROP_ARROWCODE);
       if(arrow_code != 242 && arrow_code != 241) 
           continue;
       //---
       if(arrow_code == 242)
         { 
           price = NormalizeDouble(ObjectGet(name, OBJPROP_PRICE1), Digits);
           if(price < Bid - (MarketInfo(Symbol(), MODE_STOPLEVEL)*Point))
             {
               sellstop_open(price, 0, 0);  
               ObjectDelete(name);
             }
           if(price > Ask + (MarketInfo(Symbol(), MODE_STOPLEVEL)*Point))
             {
               selllimit_open(price, 0, 0);
               ObjectDelete(name);
             }
         }
       //---
       if(arrow_code == 241)
         { 
           price = NormalizeDouble(ObjectGet(name, OBJPROP_PRICE1), Digits);
           //----
           if(price > Ask + (MarketInfo(Symbol(), MODE_STOPLEVEL)*Point))
             {
               buystop_open(price, 0, 0);
               ObjectDelete(name);
             }
           if(price < Bid - (MarketInfo(Symbol(), MODE_STOPLEVEL)*Point))
             {
               buylimit_open(price, 0, 0);
               ObjectDelete(name);
             }
         }
     }
//----
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void delete_pending_all()
  {
   bool result;
   int cmd, total;
   total = OrdersTotal();
//----
   if(total == 0) 
       return;
//----
   for(int i = total - 1; i >= 0; i--)
     {
       if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         {
           cmd = OrderType();
           //---- pending orders only are considered
           if(cmd != OP_BUY && cmd != OP_SELL)
             {
               //---- print selected order
               OrderPrint();
               //---- delete first pending order
               result = OrderDelete(OrderTicket());
               //----
               if(result != TRUE)
                 { 
                   Print("LastError = ", GetLastError());
                   break;
                 }
             }
         }
       else 
         { 
           Print( "Error when order select ", GetLastError()); 
           break; 
         }
     }
//----
   return;
 }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void selllimit_open( double price, double SL=0, double TP=0 )
  {
   int ticket, expiration;
//----
   expiration = CurTime() + PERIOD_D1*60;
//----
   ticket = OrderSend(Symbol(), OP_SELLLIMIT, Lots, price, 0, SL, TP, "", MAGICEXP, 
                      expiration, Green);
   if(ticket <= 0) 
       Print("Error = ", GetLastError());
   else 
     { 
       Print("ticket = ", ticket); 
       lastsd = CurTime(); 
     }
//----
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void sellstop_open( double price, double SL=0, double TP=0 )
  {
   int ticket, expiration;
//----
   expiration = CurTime() + PERIOD_D1*60;
//----
   ticket = OrderSend(Symbol(), OP_SELLSTOP, Lots,price, 0, SL, TP, "", MAGICEXP,
                      expiration, Green);
   if(ticket <= 0) 
       Print("Error = ", GetLastError());
   else 
     { 
       Print("ticket = ", ticket); 
       lastsd = CurTime(); 
     }
//----
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void buylimit_open(double price, double SL = 0, double TP = 0)
  {
   int ticket,expiration;
//----
   expiration = CurTime() + PERIOD_D1*60;
//----
   ticket = OrderSend(Symbol(), OP_BUYLIMIT, Lots, price, 0, SL, TP, "", MAGICEXP,
                      expiration, Green);
   if(ticket <= 0)
       Print("Error = ", GetLastError());
   else
     {
       Print("ticket = ", ticket);
       lastsd = CurTime();
     }
//----
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void buystop_open(double price, double SL = 0, double TP = 0)
  {
   int ticket, expiration;
//----
   expiration = CurTime() + PERIOD_D1*60;
//----
   RefreshRates();
   ticket = OrderSend(Symbol(), OP_BUYSTOP, Lots, price, 0, SL, TP, "", MAGICEXP,
                      expiration,Green);
   if(ticket <= 0)
       Print("Error = ", GetLastError());
   else
     {
       Print("ticket = ", ticket);
       lastsd = CurTime();
     }
//----
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void buy_open(double SL, double TP)
  {
   int ticket, lasterror;
   RefreshRates();
   ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, 5, SL, TP, 0, MAGICEXP, 0, Aqua);
   if(ticket > 0)
     {
       if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES))
           Print("BUY order opened : ", OrderOpenPrice());
       lastsd = CurTime();
     }
   else
       Print("Error opening BUY order : ", ErrorDescription(GetLastError()));
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void sell_open(double SL, double TP)
  {
   int ticket, lasterror;
   RefreshRates();
   ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, 5, SL, TP, 0, MAGICEXP, 0, Red);
   if(ticket > 0)
     {
       if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES))
           Print("Sell order opened : ", OrderOpenPrice());
       lastsd=CurTime();
     }
   else
       Print("Error opening Sell order : ", ErrorDescription(GetLastError()));
   return;
  }
//+------------------------------------------------------------------+
//|   Çàêðûòèå îðäåðîâ n=1 - çàêðûòü Buy, n=-1 - çàêðûòü Sell        |
//+------------------------------------------------------------------+
void close_order(int n = 0)
  {
   int nGetLastError;
   int nOrdersTotal = OrdersTotal();
//----
   for(int i = nOrdersTotal - 1; i >= 0; i--)
     {
       OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
       nGetLastError = GetLastError();
       //----
       if(nGetLastError != 0)
         {
           Print("Error selecting order : ", ErrorDescription(nGetLastError));
           continue;
         }
       //----
       if(OrderMagicNumber() != MAGICEXP || OrderSymbol() != Symbol())
           continue;
       //---- check order type 
       if(OrderType() == OP_BUY && n == 1)
         {
           RefreshRates();
           OrderClose(OrderTicket(), OrderLots(), Bid, 3, Aqua);
           nGetLastError = GetLastError();
           if(nGetLastError != 0)
              Print("Error closing BUY order : ", ErrorDescription(nGetLastError));
         }
       //----
       if(OrderType() == OP_SELL && n==-1)
         {
           RefreshRates();
           OrderClose(OrderTicket(), OrderLots(), Ask, 3, Yellow);
           nGetLastError = GetLastError();
           if(nGetLastError != 0)
               Print("Error closing SELL order : ", ErrorDescription(nGetLastError));
         }
     }
  }
//+------------------------------------------------------------------+
//| Ïåðåíîñ óðîâíÿ StopLoss               "Copyright" © KimIV        |
//| Ïàðàìåòðû:                                                       |
//|   ldStopLoss - óðîâåíü StopLoss                                  |
//|   clModify   - öâåò ìîäèôèêàöèè                                  |
//+------------------------------------------------------------------+
void ModifyStopLoss(double ldStop, color clModify = Magenta )
  {
   bool fm;
   double ldOpen = OrderOpenPrice();
   double ldTake = OrderTakeProfit();
   int err;
//----
   if(IsTradeAllowed())
     {
       fm = OrderModify(OrderTicket(), ldOpen, ldStop, ldTake, 0, clModify);
       if(!fm)
         {
           err = GetLastError();
           Print("Error(",err,") modifying SL: ", ErrorDescription(err));
         }
     }
  }
//+------------------------------------------------------------------+
//| Ïåðåíîñ óðîâíÿ TakeProfit                                        |
//| Ïàðàìåòðû:                                                       |
//|   ldTake - óðîâåíü TakeProfit                                    |
//|   clModify   - öâåò ìîäèôèêàöèè                                  |
//+------------------------------------------------------------------+
void ModifyTakeProfit(double ldTake, color clModify = Magenta )
  {
   bool fm;
   double ldOpen = OrderOpenPrice();
   double ldStop = OrderStopLoss();
   int  err;
//----
   if(IsTradeAllowed())
     {
       fm = OrderModify(OrderTicket(), ldOpen, ldStop, ldTake, 0, clModify);
       if(!fm)
         {
           err = GetLastError();
           Print("Error(",err,") modifying SL: ", ErrorDescription(err));
         }
     }
  }
//+------------------------------------------------------------------+
//| Ðàçáèåíèå ñòðîêè íà ìàññèâ ýëåìåíòîâ                             |
//| Âîçâðàò:                                                         |
//|   Êîëè÷åñòâî ýëåìåíòîâ â ìàññèâå                                 |
//| Ïàðàìåòðû:                                                       |
//|   source      - òåêñòîâàÿ ñòðîêà                                 |
//|   dest        - âûõîäíîé ìàññèâ                                  |
//|   delimeter   - ðàçäåëèòåëü                                      |
//+------------------------------------------------------------------+
int StrSplit(string source, string& dest[], string delimeter = ";")
  {
   int cnt = 0;
   int last_pos = 0;
   int pos = StringFind(source, delimeter, last_pos);
//----
   while(pos != -1)
     {
       ArrayResize(dest, cnt + 1);
       dest[cnt] = StringSubstr(source, last_pos, pos - last_pos);
       cnt++;
       last_pos = pos + 1;
       pos = StringFind(source, delimeter, last_pos);
     }
   if(last_pos != 0 && last_pos < StringLen(source))
     {
       ArrayResize(dest, cnt + 1);
       dest[cnt] = StringSubstr(source, last_pos, StringLen(source) - last_pos);
       cnt++;
     }
   return (cnt);
  }
//+------------------------------------------------------------------+







Sample





Analysis



Market Information Used:



Indicator Curves created:


Indicators Used:



Custom Indicators Used:
IdleLib

Order Management characteristics:

It Closes Orders by itself
It can change open orders parameters, due to possible stepping strategy
Checks for the total of open orders
It automatically opens orders when conditions are reached

Other Features:

BackTest : EURUSD on H1

From 2009-08-01 to 2009-10-01 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2009-12-01 to 2010-01-17 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2010-03-01 to 2010-03-27 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2010-04-01 to 2010-04-30 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2010-05-01 to 2010-05-31 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2010-06-01 to 2010-06-30 Profit Factor:0.00 Total Net Profit:0.00

BackTest : GBPUSD on H1

From 2010-01-01 to 2010-02-27 Profit Factor:0.00 Total Net Profit:0.00

BackTest : USDCAD on H1

From 2009-01-01 to 2010-01-01 Profit Factor:0.00 Total Net Profit:0.00

BackTest : USDCAD on H1

From 2009-12-01 to 2010-01-01 Profit Factor:0.00 Total Net Profit:0.00

BackTest : USDCHF on H1

From 2009-12-01 to 2010-01-01 Profit Factor:0.00 Total Net Profit:0.00

BackTest : USDJPY on H1

From 2009-11-01 to 2009-11-30 Profit Factor:0.00 Total Net Profit:0.00

Request Backtest for Visual_Handle_Tranning_51_4


From : (yyyy/mm/dd) To: (yyyy/mm/dd)

Pair: Period: