Author: Copyright � 2008, MetaQuotes Software Corp.
Orders Execution
Checks for the total of open ordersIt automatically opens orders when conditions are reachedIt can change open orders parameters, due to possible stepping strategy
Indicators Used
Relative strength index
0 Views
0 Downloads
0 Favorites
RSI_Test
//+------------------------------------------------------------------+
//|                                                     RSI_Test.mq4 |
//|                      Copyright © 2008, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"


extern double RiskPercentage = 10;     // ðèñê
extern int    TrailingStop   = 50;     // òðåéëèíã ñòîï
extern int    MaxOrders      =  1;     // ìàêñèìàëüíîå êîëè÷åñòâî îðäåðîâ, åñëè 0 - íå êîíòðîëèðóåòñÿ
extern int    BuyOp          = 12;     // ñèãíàë íà ïîêóïêó
extern int    SellOp         = 88;     // ñèãíàë íà ïðîäàæó
extern int    magicnumber    = 777;
extern int    Test           = 14;     // ïåðèîä RSI
int expertBars;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
extern int SetHour   = 00;             //×àñ ñòàðòà îïòèìèçàöèè 
extern int SetMinute = 05;             //Ìèíóòà ñòàðòà îïòèìèçàöèè 
int    TestDay     = 3;                      //Êîëè÷åñòâî äíåé äëÿ îïòèìèçàöèè 
int    TimeOut     = 12;                     //Âðåìÿ îæèäàíèÿ îêîí÷àíèÿ îïòèìèçàöèè â ìèíóòàõ
string NameMTS     = "rsi_test";        //Èìÿ ñîâåòíèêà
string NameFileSet = "rsi_test.set";             //Èìÿ Set ôàéëà ñ óñòàíîâêàìè
string PuthTester  = "D:\Forex\Metatrader1";//Ïóòü ê òåñòåðó
//--- Ïîñëåäîâàòåëüíîñòü ôèëüòðàöèè
int    Gross_Profit   = 1;                   //Ñîðòèðîâêà ïî Ìàêñèìàëüíîé ïðèáûëè
int    Profit_Factor  = 2;                   //Ñîðòèðîâêà ïî Ìàêñèìàëüíîé ïðèáûëüíîñòè
int    Expected_Payoff= 3;                   //Ñîðòèðîâêà ïî Ìàêñèìàëüíîìó ìàòîæèäàíèþ
//--èìåíà ïåðåìåííûõ äëÿ îïòèìèçàöèè
string Per1 = "BuyOp";
string Per2 = "SellOp";
string Per3 = "Test";
string Per4 = "";
bool StartTest=false;
datetime TimeStart;
//--- Ïîäêëþ÷åíèå áèáëèîòåêè àâòîîïòèìèçàòîðà
#include <auto_optimization.mqh>

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----


   double margin = MarketInfo(Symbol(), MODE_MARGINREQUIRED);
   double minLot = MarketInfo(Symbol(), MODE_MINLOT);
   double maxLot = MarketInfo(Symbol(), MODE_MAXLOT);
   double step =   MarketInfo(Symbol(), MODE_LOTSTEP);
   double account = AccountFreeMargin();
   
   double percentage = account*RiskPercentage/100;
   
   double Lots = MathRound(percentage/margin/step)*step;
   
   if(Lots < minLot)
   {
      Lots = minLot;
   }
   
   if(Lots > maxLot)
   {
      Lots = maxLot;
   }
   
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   if(!IsTesting() && !IsOptimization()){                //Ïðè òåñòèðîâàíèè è îïòèìèçàöèè íå çàïóñêàòü
      if(TimeHour(TimeCurrent())==SetHour){                //Ñðàâíåíèå òåêóùåãî ÷àñà ñ óñòàíîâëåííûì äëÿ çàïóñêà
        if(!StartTest){                                 //Çàùèòà îò ïîâòîðíîãî çàïóñêà
            if(TimeMinute(TimeCurrent())>SetMinute-1){     //Ñðàâíåíèå äèàïàçîíà ìèíóò ñ óñòàíîâëåííîé äëÿ çàïóñêà ìèíóòîé
               if(TimeMinute(TimeCurrent())<SetMinute+1){  //äèàïàçîí íóæåí â ñëó÷àå åñëè ïî êàêèì-òî ïðè÷èíàì äîëãî íåò íîâîãî òèêà
                  TimeStart   =TimeLocal();
                  StartTest   =true;                     //Ôëàã çàïóñêà òåñòåðà
                  Tester(TestDay,NameMTS,NameFileSet,PuthTester,TimeOut,Gross_Profit,Profit_Factor,Expected_Payoff,Per1,Per2,Per3,Per4);
   }}}}
   BuyOp     =GlobalVariableGet(Per1);
   SellOp    =GlobalVariableGet(Per2);
   Test      =GlobalVariableGet(Per3);
//   TrailingStop=GlobalVariableGet(Per4);
   }
   if(StartTest){                                        //Åñëè ôëàã çàïóñêà òåñòåðà óñòàíîâëåí
       if(TimeLocal()-TimeStart > TimeOut*60){            //Åñëè ñ ìîìåíòà çàïóñêà ïðîøëî áîëüøå óñòàíîâëåííîãî âðåìåíè îæèäàíèÿ òåñòèðîâàíèÿ
       StartTest = false;                                //Îáíóëèì ôëàã
   }}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    if(!StartTest){Comment("BuyOp ",BuyOp,"  | SellOp ",SellOp,"  | Test ",Test);}   
   
   
   int i=0;  
   int total = OrdersTotal();   
   for(i = 0; i <= total; i++) 
     {
      if(TrailingStop>0)  
       {                 
       OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
       if(OrderMagicNumber() == magicnumber) 
         {
         TrailingStairs(OrderTicket(),TrailingStop,TrailingStop);
         }
       }
      }

   if ((total < MaxOrders || MaxOrders == 0)) 
     {
      if ((iRSI(NULL,0,Test,PRICE_CLOSE,0) < BuyOp) && (iRSI(NULL,0,Test,PRICE_CLOSE,0) > iRSI(NULL,0,Test,PRICE_CLOSE,1)))
       {
        if (Open[0]>Open[1])
          {OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"RSI_Buy",magicnumber,0,Green);}
       }
      if ((iRSI(NULL,0,Test,PRICE_CLOSE,0) > SellOp) && (iRSI(NULL,0,Test,PRICE_CLOSE,0) < iRSI(NULL,0,Test,PRICE_CLOSE,1)))
       {
        if (Open[0]<Open[1])
          {OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"RSI_Sell",magicnumber,0,Red);}
       }
     } 
//----
   return(0);
  }
//+------------------------------------------------------------------+

void TrailingStairs(int ticket,int trldistance,int trlstep)
   { 
   
   double nextstair; // áëèæàéøåå çíà÷åíèå êóðñà, ïðè êîòîðîì áóäåì ìåíÿòü ñòîïëîññ
 
   // ïðîâåðÿåì ïåðåäàííûå çíà÷åíèÿ
   if ((trldistance<MarketInfo(Symbol(),MODE_STOPLEVEL)) || (trlstep<1) || (trldistance<trlstep) || (ticket==0) || (!OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)))
      {
      Print("Òðåéëèíã ôóíêöèåé TrailingStairs() íåâîçìîæåí èç-çà íåêîððåêòíîñòè çíà÷åíèé ïåðåäàííûõ åé àðãóìåíòîâ.");
      return(0);
      } 
   
   // åñëè äëèííàÿ ïîçèöèÿ (OP_BUY)
   if (OrderType()==OP_BUY)
      {
      // ðàñ÷èòûâàåì, ïðè êàêîì çíà÷åíèè êóðñà ñëåäóåò ñêîððåêòèðîâàòü ñòîïëîññ
      // åñëè ñòîïëîññ íèæå îòêðûòèÿ èëè ðàâåí 0 (íå âûñòàâëåí), òî áëèæàéøèé óðîâåíü = êóðñ îòêðûòèÿ + trldistance + ñïðýä
      if ((OrderStopLoss()==0) || (OrderStopLoss()<OrderOpenPrice()))
      nextstair = OrderOpenPrice() + trldistance*Point;
         
      // èíà÷å áëèæàéøèé óðîâåíü = òåêóùèé ñòîïëîññ + trldistance + trlstep + ñïðýä
      else
      nextstair = OrderStopLoss() + trldistance*Point;
 
      // åñëè òåêóùèé êóðñ (Bid) >= nextstair è íîâûé ñòîïëîññ òî÷íî ëó÷øå òåêóùåãî, êîððåêòèðóåì ïîñëåäíèé
      if (Bid>=nextstair)
         {
         if ((OrderStopLoss()==0) || (OrderStopLoss()<OrderOpenPrice()) && (OrderOpenPrice() + trlstep*Point<Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point)) 
            {
            if (!OrderModify(ticket,OrderOpenPrice(),OrderOpenPrice() + trlstep*Point,OrderTakeProfit(),OrderExpiration()))
            Print("Íå óäàëîñü ìîäèôèöèðîâàòü ñòîïëîññ îðäåðà ¹",OrderTicket(),". Îøèáêà: ",GetLastError());
            }
         }
 /*     else
         {
         if (!OrderModify(ticket,OrderOpenPrice(),OrderStopLoss() + trlstep*Point,OrderTakeProfit(),OrderExpiration()))
         Print("Íå óäàëîñü ìîäèôèöèðîâàòü ñòîïëîññ îðäåðà ¹",OrderTicket(),". Îøèáêà: ",GetLastError());
         }*/
      }
      
   // åñëè êîðîòêàÿ ïîçèöèÿ (OP_SELL)
   if (OrderType()==OP_SELL)
      { 
      // ðàñ÷èòûâàåì, ïðè êàêîì çíà÷åíèè êóðñà ñëåäóåò ñêîððåêòèðîâàòü ñòîïëîññ
      // åñëè ñòîïëîññ íèæå îòêðûòèÿ èëè ðàâåí 0 (íå âûñòàâëåí), òî áëèæàéøèé óðîâåíü = êóðñ îòêðûòèÿ + trldistance + ñïðýä
      if ((OrderStopLoss()==0) || (OrderStopLoss()>OrderOpenPrice()))
      nextstair = OrderOpenPrice() - (trldistance + MarketInfo(Symbol(),MODE_SPREAD))*Point;
      
      // èíà÷å áëèæàéøèé óðîâåíü = òåêóùèé ñòîïëîññ + trldistance + trlstep + ñïðýä
      else
      nextstair = OrderStopLoss() - (trldistance + MarketInfo(Symbol(),MODE_SPREAD))*Point;
       
      // åñëè òåêóùèé êóðñ (Àñê) >= nextstair è íîâûé ñòîïëîññ òî÷íî ëó÷øå òåêóùåãî, êîððåêòèðóåì ïîñëåäíèé
      if (Ask<=nextstair)
         {
         if ((OrderStopLoss()==0) || (OrderStopLoss()>OrderOpenPrice()) && (OrderOpenPrice() - (trlstep + MarketInfo(Symbol(),MODE_SPREAD))*Point>Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point))
            {
            if (!OrderModify(ticket,OrderOpenPrice(),OrderOpenPrice() - (trlstep + MarketInfo(Symbol(),MODE_SPREAD))*Point,OrderTakeProfit(),OrderExpiration()))
            Print("Íå óäàëîñü ìîäèôèöèðîâàòü ñòîïëîññ îðäåðà ¹",OrderTicket(),". Îøèáêà: ",GetLastError());
            }
         }
 /*     else
         {
         if (!OrderModify(ticket,OrderOpenPrice(),OrderStopLoss()- (trlstep + MarketInfo(Symbol(),MODE_SPREAD))*Point,OrderTakeProfit(),OrderExpiration()))
         Print("Íå óäàëîñü ìîäèôèöèðîâàòü ñòîïëîññ îðäåðà ¹",OrderTicket(),". Îøèáêà: ",GetLastError());
         }*/
      }      
   }

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---