Orders Execution
Indicators Used
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 Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---