Orders Execution
Indicators Used
Miscellaneous
0
Views
0
Downloads
0
Favorites
reco
//+------------------------------------------------------------------+
//| ProjectName |
//| Copyright 2012, CompanyName |
//| http://www.companyname.net |
//+------------------------------------------------------------------+
#property copyright "eevviill"
#property link "http://alievtm.blogspot.com/"
#property version "2.2"
#property strict
#property description "M1?"
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
enum po_koefs
{
_1=1,/*1*/ _10=10,/*10*/ _100=100,/*100*/ _1000=1000,/*1000*/
};
extern string oth_set = "///////////////Other settings///////////////////";
extern int Max_orders = 0;
extern int Slippage=0;
extern int Magic=456;
extern string comment="Reco";
extern po_koefs point_multiplier=_10;
extern string sig_set = "///////////////Signal settings///////////////////";
extern int RSI_period = 14;
extern double RSI_sell_zone= 70;
extern double RSI_buy_zone = 30;
extern string lot_set="///////////////Lot settings///////////////////";
extern double Lot=0.01;
extern double Lot_multiplier=2;
extern double max_lot = 0;
extern double min_lot = 0;
extern string dis_set="///////////////Distance settings///////////////////";
extern int start_distance=20;
extern double distance_multiplier=1.5;
extern int max_distance = 0;
extern int min_distance = 0;
extern string prof_set="///////////////Profit/Lose settings///////////////////";
extern bool use_close_profit = true;
extern double profit_1_order = 2;
extern double profit_multiplier=0.7;
extern bool use_close_lose = false;
extern double lose_1_order = 6;
extern double lose_multiplier=1.1;
int Sig_p;
int buys,sells,Orders_Total;
double point=Point*point_multiplier;
int nor_lot=2;
//////////////////////////////////////////////////////////////
int OnInit()
{
if(MarketInfo(Symbol(),MODE_LOTSTEP)==0.1) nor_lot=1;
return(INIT_SUCCEEDED);
}
////////////////////////////////////
void OnTick()
{
//close profit
if(use_close_profit)
{
CountOpenedPositions_f();
if(Profit_f()>=profit_1_order*MathPow(profit_multiplier,Orders_Total-1)) Close_all_f();
}
//close lose
if(use_close_lose)
{
CountOpenedPositions_f();
if(Profit_f()<=-(lose_1_order*MathPow(lose_multiplier,Orders_Total-1))) Close_all_f();
}
//open
Sig_p=Sig_f();
if(Sig_p!=0) open_f();
}
//func
/////////////////////////////////////////////////////////////////////////////////////////////
char Sig_f()
{
CountOpenedPositions_f();
if(Orders_Total==0)
{
double rsi=iRSI(Symbol(),0,RSI_period,PRICE_CLOSE,0);
if(rsi>=RSI_sell_zone) return(-1);
if(rsi<=RSI_buy_zone) return(1);
}
else
{
if(Max_orders>0 && Orders_Total>=Max_orders) return(0);
Select_last_order_f();
//last buy
if(OrderType()==OP_BUY)
{
double dist=start_distance*point*MathPow(distance_multiplier,Orders_Total-1);
if(max_distance>0 && dist>max_distance*point) dist=max_distance*point;
if(min_distance>0 && dist<min_distance*point) dist=min_distance*point;
if(Bid<=OrderOpenPrice()-dist) return(-1);
}
//last sell
if(OrderType()==OP_SELL)
{
double dist=start_distance*point*MathPow(distance_multiplier,Orders_Total-1);
if(max_distance>0 && dist>max_distance*point) dist=max_distance*point;
if(min_distance>0 && dist<min_distance*point) dist=min_distance*point;
if(Ask>=OrderOpenPrice()+dist) return(1);
}
}//end else
return(0);
}
///////////////////////////////////////////////////////////////////////////////////////////////
void open_f()
{
///////////// LOT /////////////////
double Lotss=Lot;
CountOpenedPositions_f();
Lotss=Lot*MathPow(Lot_multiplier,Orders_Total);
//user limit
if(max_lot>0 && Lotss>max_lot) Lotss=max_lot;
if(min_lot>0 && Lotss<min_lot) Lotss=min_lot;
//broker limit
double Min_Lot =MarketInfo(Symbol(),MODE_MINLOT);
double Max_Lot =MarketInfo(Symbol(),MODE_MAXLOT);
if(Lotss<Min_Lot) Lotss=Min_Lot;
if(Lotss>Max_Lot) Lotss=Max_Lot;
//chek free margin
if(MarketInfo(Symbol(),MODE_MARGINREQUIRED)*Lotss>AccountFreeMargin()) {Alert("Not enouth money to open order "+string(Lotss)+" lots!");return;}
///////////// MAIN /////////////
int ticket_op=-1;
for(int j_op = 0; j_op < 64; j_op++)
{
while(IsTradeContextBusy()) Sleep(200);
RefreshRates();
if(Sig_p>0) ticket_op=OrderSend(Symbol(),OP_BUY,NormalizeDouble(Lotss,nor_lot),Ask,Slippage,0,0,comment,Magic,0,clrNONE);
if(Sig_p<0) ticket_op=OrderSend(Symbol(),OP_SELL,NormalizeDouble(Lotss,nor_lot),Bid,Slippage,0,0,comment,Magic,0,clrNONE);
if(ticket_op>-1)break;
}
}
////////////////////////////////////////////////////////////////////////////////////
void CountOpenedPositions_f()
{
buys=0;
sells=0;
Orders_Total=0;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS))
{
if(OrderMagicNumber()==Magic)
{
if(OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY) buys++;
if(OrderType()==OP_SELL) sells++;
}
}
}
}
Orders_Total=buys+sells;
}
////////////////////////////////////////////////////////////////////
void Select_last_order_f()
{
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS))
{
if(OrderMagicNumber()==Magic)
{
if(OrderSymbol()==Symbol())
{
break;
}
}
}
}
}
///////////////////////////////////////////////////////////////////////////////////
double Profit_f()
{
double prof=0;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS))
{
if(OrderMagicNumber()==Magic)
{
if(OrderSymbol()==Symbol())
{
prof+=OrderProfit()+OrderSwap()+OrderCommission();
}
}
}
}
return(prof);
}
////////////////////////////////////////////////////////////////////////////////
void Close_all_f()
{
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS))
{
if(OrderMagicNumber()==Magic)
{
if(OrderSymbol()==Symbol())
{
bool ticket_ex=false;
for(int j_ex=0;j_ex<64; j_ex++)
{
while(IsTradeContextBusy()) Sleep(200);
RefreshRates();
if(OrderType()==OP_BUY) ticket_ex=OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,clrYellow);
else
if(OrderType()==OP_SELL) ticket_ex=OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,clrYellow);
else
if(OrderType()==OP_SELLSTOP || OrderType()==OP_BUYSTOP || OrderType()==OP_SELLLIMIT || OrderType()==OP_BUYLIMIT) ticket_ex=OrderDelete(OrderTicket(),clrBrown);
else
break;
if(ticket_ex==true)break;
}
}
}
}
}
}
//+------------------------------------------------------------------+
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
---