test_group/test_group.mq5
super.admin be35c066ea convert
2025-05-30 16:31:23 +02:00

656 lines
51 KiB
MQL5

//+------------------------------------------------------------------+
//| rrr.mq4 |
//| Copyright 2017, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
extern int time_in=1;
extern int frame_stop=1;
extern int max_stop=1000;
extern int max_spreed=70;
extern bool from_balance=FALSE;
extern bool is_stop=FALSE;
extern bool only_trend=FALSE;
extern bool stop_blue=TRUE;
extern string now_trend="none";
/*
enum trendname
{
"none",
"buy", // Sunday
"sell" // Saturday
};
//--- input parameters
input trendname my;
*/
extern double Lots=0.01;
extern int first_frame=5;
//30
extern int first_num=10;
extern string tang="123";
//4
extern int stop_num=1;
//5
extern double risk_proc=0.5;
extern double min_open=3.01;
extern int max_buy=1;
extern int max_sell=1;
int buystopid, sellstopid;
void OnInit()
{
//---
if(now_trend=="none") now_trend=isho_trend(5);
//Alert(now_trend);
//---
// return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
string in_tang(string tang_id,int shift=0){
string out="null";
double price_bot=ObjectGet(tang_id,OBJPROP_PRICE1);
double price_top=ObjectGet(tang_id,OBJPROP_PRICE2);
double now_price=iOpen(Symbol(),5,shift);
if(shift==0)now_price=Bid;
if(now_price>price_top)out="top";
if(now_price<price_bot)out="niz";
if(now_price>price_bot && now_price<price_top)out="in tang";
return out;
}
string all_tag(){
string arr[4]={"top","bottom","top2","bottom2"};
int i;
string out="null";
for(i=0;i<4;i++){
if(in_tang(arr[i],2)=="in tang" && in_tang(arr[i])=="top")out=StringConcatenate("buy ",arr[i]);
if(in_tang(arr[i],2)=="in tang" && in_tang(arr[i])=="niz")out=StringConcatenate("sel ",arr[i]);
}
return out;
}
void OnTick()
{
//---
int total,cnt,order_buy_c,order_sell_c,buy_id=0,sell_id=0;
total = OrdersTotal();
buystopid=0;
sellstopid=0;
RectangleDelete(0,"bottom_5");
RectangleDelete(0,"top_5");
RectangleDelete(0,"bottom_5-2");
RectangleDelete(0,"top_5-2");
make_level("bottom",find_level("bottom",1,0,5),5,"bottom_5",clrAqua);
make_level("top",find_level("top",1,0,5),5,"top_5",clrBrown);
make_level("bottom",find_level("bottom",find_level("bottom",1,0,5)+2,0,5),5,"bottom_5-2",clrAquamarine);
make_level("top",find_level("top",find_level("top",1,0,5),0,5)+2,5,"top_5-2",clrBlue);
double pricetop_5=ObjectGet("top_5",OBJPROP_PRICE2);
double pricebottom_5=ObjectGet("bottom_5",OBJPROP_PRICE1);
for(cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol()!=Symbol())continue;
if(is_stop==TRUE)
make_stop(OrderTicket());
if(OrderType()==OP_BUYSTOP)buystopid=OrderTicket();
if(OrderType()==OP_SELLSTOP)sellstopid=OrderTicket();
if(OrderType()==OP_BUY ){
order_buy_c++;
pricebottom_5=pricebottom_5-5*Point;
if(pricebottom_5>OrderOpenPrice() && OrderStopLoss()<pricebottom_5 && is_stop==TRUE){
OrderModify(OrderTicket(),OrderOpenPrice(),pricebottom_5,OrderTakeProfit(),0,clrDarkViolet);
if(sellstopid>0)OrderDelete(sellstopid);
}
buy_id=OrderTicket();
}
if(OrderType()==OP_SELL ){
pricetop_5=pricetop_5+MarketInfo(Symbol(),MODE_SPREAD)*Point+5*Point;
if(pricetop_5<OrderOpenPrice() && pricetop_5<OrderStopLoss() && is_stop==TRUE){
OrderModify(OrderTicket(),OrderOpenPrice(),pricetop_5,OrderTakeProfit(),0,clrDarkViolet);
if(buystopid>0)OrderDelete(buystopid);
}
order_sell_c++;
sell_id=OrderTicket();
}
}
/*
if((order_buy_c<1 && (make_money(1)=="buy" || make_money(time_in)=="buy")) || (order_sell_c<1 && (make_money(1)=="sell" || make_money(time_in)=="sell"))){
open_order(make_money(time_in));
//open_order(make_money(1));
if(make_money(1)=="buy" && order_sell_c>0)my_close(sell_id);
if(make_money(1)=="sell" && order_buy_c>0)my_close(buy_id);
}
*/
double price1=ObjectGet(tang,OBJPROP_PRICE1);
double price2=ObjectGet(tang,OBJPROP_PRICE2);
Comment(now_trend,"--",all_tag(),"-",order_buy_c," ",order_sell_c,"is5-",isho_trend(5)," all",check_all(),make_take(240,"sell"),"b0=",bband(time_in,"up",0)-bband(time_in,"down",0)," b1=",bband(time_in,"up",1)-bband(time_in,"down",1),"==",(bband(time_in,"up",0)-bband(time_in,"down",0))-(bband(time_in,"up",1)-bband(time_in,"down",1))," ",b_flat(),"pr ",in_tang(tang));
double line_low=iLow(Symbol(),first_frame,iLowest(Symbol(),first_frame,MODE_LOW,first_num,2));
double line_top=iHigh(Symbol(),first_frame,iHighest(Symbol(),first_frame,MODE_HIGH,first_num,2));
make_line("top_line",line_top);
make_line("bot",line_low);
double pricetop=ObjectGet("top",OBJPROP_PRICE2);
double pricebottom=ObjectGet("bottom",OBJPROP_PRICE1);
double fr5=make_level_before("bot_price","bot",1,5);
RectangleDelete(0,"bottom_5");
RectangleDelete(0,"top_5");
make_level("bottom",find_level("bottom",1,0,5),5,"bottom_5",clrAqua);
make_level("top",find_level("top",1,0,5),5,"top_5",clrBrown);
//make_level(
//if(make_level_before("top_price","top",find_level("top"))!=pricetop){
RectangleDelete(0,"top");
RectangleDelete(0,"bottom");
RectangleDelete(0,"bottom2");
RectangleDelete(0,"top2");
make_level("top",find_level("top"));
make_level("bottom",find_level("bottom"));
make_level("top",find_level("top",find_level("top")+1,1),60,"top2");
make_level("bottom",find_level("bottom",find_level("bottom")+1,1),60,"bottom2");
double f_max=find_max();
double f_min=find_min();
make_line("l_top",f_max,clrYellow,to_price(f_max));
make_line("l_bot",f_min,clrYellow,to_price(f_min));
ChartRedraw();
//}
// open new StringSubstr
if(buy_id>sell_id && buy_id>0)now_trend="buy";
if(buy_id<sell_id && sell_id>0)now_trend="sell";
if(order_buy_c<max_buy && to_price(f_max)>to_price(f_min) && /*StringSubstr(all_tag(),0,3)=="buy" && iClose(Symbol(),5,1)>line_top &&*/ ((iLow(Symbol(),5,1)<ObjectGet("top_5",OBJPROP_PRICE1) && iOpen(Symbol(),5,0)>ObjectGet("top_5",OBJPROP_PRICE2)) || (iLow(Symbol(),5,1)<ObjectGet("bottom_5",OBJPROP_PRICE1) && iOpen(Symbol(),5,0)>ObjectGet("bottom_5",OBJPROP_PRICE2)) )&& now_trend!="buy"){open_order2("buy",StringSubstr(all_tag(),4));my_close(sell_id);now_trend="buy";}
if(order_sell_c<max_sell && to_price(f_max)<to_price(f_min) && /*StringSubstr(all_tag(),0,3)=="sel" && (iClose(Symbol(),5,1)< line_low ||*/ ( iHigh(Symbol(),5,1)>ObjectGet("top_5",OBJPROP_PRICE2) && iOpen(Symbol(),5,0)<ObjectGet("top_5",OBJPROP_PRICE1)) && now_trend!="sell"){open_order2("sell",StringSubstr(all_tag(),4));my_close(buy_id);now_trend="sell";}
if(sell_id==0 && buystopid>0)OrderDelete(buystopid);
if(buy_id==0 && sellstopid>0)OrderDelete(sellstopid);
}
double make_level_before(string want="top_price",string to="top",int shift=0, int frame=60){
double bot_price,top_price,pr1,pr2,out;
int shift2=shift+1;
// string out=to;
if(to=="top"){
bot_price=iOpen(Symbol(),frame,shift);
pr1=iHigh(Symbol(),frame,shift);
pr2=iHigh(Symbol(),frame,shift2);
if(pr1>pr2)top_price=pr1;
else top_price=pr2;
}
if(to=="bottom"){
top_price=iOpen(Symbol(),frame,shift);
pr1=iLow(Symbol(),frame,shift);
pr2=iLow(Symbol(),frame,shift2);
if(pr1<pr2)bot_price=pr1;
else bot_price=pr2;
}
if(want=="top_price")out=top_price;
else out=bot_price;
return out;
}
bool make_level(string to="top",int shift=0, int frame=60, string name="top", color clr=clrOrange){
double bot_price=make_level_before("bot_price",to,shift,frame);
double top_price=make_level_before("top_price",to,shift,frame);
if(name=="top")name=to;
RectangleCreate(0,name,0,iTime(Symbol(),frame,shift)-frame*60,bot_price,iTime(Symbol(),frame,0)+frame*60,top_price,clr);
return(true);
}
int find_level(string to="top",int from=1, int next=0, int frame=60){
int b;
for(b=from;b<2000;b++){
if(check_level(b,frame)==to){
if(next==0)
break;
else{
if(to=="top" && iOpen(Symbol(),frame,b)>iOpen(Symbol(),frame,0))break;
if(to=="bottom" && iOpen(Symbol(),frame,b)<iOpen(Symbol(),frame,0))break;
}
}
}
return b;
}
string check_level(int shift=1, int frame=60){
string out="null";
int last=shift+1;
int last3=shift+2;
if(iOpen(Symbol(),frame,last)>iClose(Symbol(),frame,last) && iClose(Symbol(),frame,shift)>iOpen(Symbol(),frame,shift)
&& iOpen(Symbol(),frame,last3)> iOpen(Symbol(),frame,last)
)
out="bottom";
if(iOpen(Symbol(),frame,last)<iClose(Symbol(),frame,last) && iClose(Symbol(),frame,shift)<iOpen(Symbol(),frame,shift)
&& iOpen(Symbol(),frame,last3)< iOpen(Symbol(),frame,last)
)
out="top";
return out;
}
void my_close(int id){
OrderSelect(id,SELECT_BY_TICKET,MODE_TRADES);
if(OrderProfit()+OrderCommission()+OrderSwap()>0){
if(OrderType()==OP_BUY){OrderClose(OrderTicket(),OrderLots(),Bid,3,Red);OrderDelete(sellstopid);}
if(OrderType()==OP_SELL){OrderClose(OrderTicket(),OrderLots(),Ask,3,Red);OrderDelete(buystopid);}
}
}
string stoch_trend(int frame){
string out="null";
if(iStochastic(Symbol(),frame,5,3,3,MODE_SMA,0,MODE_MAIN,0)>iStochastic(Symbol(),frame,5,3,3,MODE_SMA,0,MODE_SIGNAL,0))out="buy";
else out="sell";
return out;
}
string stoch(int frame){
string out="null";
double st=iStochastic(Symbol(),frame,5,3,3,MODE_SMA,0,MODE_SIGNAL,0);
if(st>70)out="sell";
if(st<30)out="buy";
return out;
}
double stoch_db(int frame){
return iStochastic(Symbol(),frame,5,3,3,MODE_SMA,0,MODE_SIGNAL,0);
}
string check_stoch(int frame){
string out="not";
if(stoch(frame)==stoch_trend(frame))out=stoch(frame);
return out;
}
string bar_op(int frame){
string out="null";
double low_last=iLow(Symbol(),frame,1);
double close_last=iClose(Symbol(),frame,1);
double open_last=iOpen(Symbol(),frame,1);
double high_last=iHigh(Symbol(),frame,1);
double open_now=iOpen(Symbol(),frame,0);
double half_buy=(open_last-close_last)/2+open_last;
double half_sell=(close_last-open_last)/2-close_last;
if(open_last>close_last && close_last-low_last>2*Point && Bid>half_buy)out="buy";
if(close_last>open_last && high_last-close_last>2*Point && half_buy>Bid)out="sell";
return out;
}
string isho_trend(int frame){
string out="null";
double span_a=iIchimoku(Symbol(),frame,9,26,52,MODE_SENKOUSPANA,0);
double span_b=iIchimoku(Symbol(),frame,9,26,52,MODE_SENKOUSPANB,0);
if(Bid<span_a && Bid<span_b)out="sell";
if(Bid>span_a && Bid>span_b)out="buy";
return out;
}
string check_all(){
int arr[4]={5,15,30,60};
int i;
string out;
out=isho_trend(60);
for(i=0;i<4;i++){
if(isho_trend(arr[i])!=out)out=StringConcatenate(out," in ",arr[i],"-",isho_trend(arr[i]));
}
//Alert(out);
return out;
}
double find_max(int to=5){
int arr[5]={1,5,15,30,60};
int i;
double out,out1;
out=0;
for(i=0;i<to;i++){
out1=iBands(Symbol(),arr[i],20,2,0,PRICE_CLOSE,MODE_UPPER,0);
if(out1>out)out=out1;
}
return out;
}
double find_min(int to=5){
int arr[5]={1,5,15,30,60};
int i;
double out,out1;
out=10000000;
for(i=0;i<to;i++){
out1=iBands(Symbol(),arr[i],20,2,0,PRICE_CLOSE,MODE_LOWER,0);
if(out1<out)out=out1;
}
return out;
}
string make_money(int frame){
string out="null";
double red=iIchimoku(Symbol(),frame,9,26,52,MODE_TENKANSEN,0);
double blue=iIchimoku(Symbol(),frame,9,26,52,MODE_KIJUNSEN,0);
double red_last=iIchimoku(Symbol(),frame,9,26,52,MODE_TENKANSEN,2);
double blue_last=iIchimoku(Symbol(),frame,9,26,52,MODE_KIJUNSEN,2);
double green=iIchimoku(Symbol(),frame,9,26,52,MODE_CHIKOUSPAN,26);
double close26=iClose(Symbol(),frame,26);
double span_a=iIchimoku(Symbol(),frame,9,26,52,MODE_SENKOUSPANA,0);
double span_b=iIchimoku(Symbol(),frame,9,26,52,MODE_SENKOUSPANB,0);
double span_high,span_low;
if(span_a>span_b){span_high=span_a;span_low=span_b;}
else{span_high=span_b;span_low=span_a;}
if(only_trend==FALSE){
if(isho_trend(60)!=isho_trend(frame) && isho_trend(1)!="null" && isho_trend(60)==check_all()){
if(isho_trend(frame)=="sell" && check_stoch(frame)=="sell" && bar_op(frame)=="sell" && stoch_db(5)>40)out="sell";
if(isho_trend(frame)=="buy" && check_stoch(frame)=="buy" && bar_op(frame)=="buy" && stoch_db(5)<60)out="buy";
}
}
/*
if(isho_trend(60)==isho_trend(frame) && isho_trend(1)!="null"){
if(isho_trend(frame)=="sell" && check_stoch(frame)=="sell" && bar_op(frame)=="sell" && stoch_db(5)>40)out="sell";
if(isho_trend(frame)=="buy" && check_stoch(frame)=="buy" && bar_op(frame)=="buy" && stoch_db(5)<60)out="buy";
}
*/
if(frame>4){
if(stoch_db(time_in)>0){
if(red_last>=blue_last && blue>red && Bid<red && green<close26 && in_cloud(frame)==FALSE)out="sell";
if(in_cloud(frame,1)==TRUE && in_cloud(frame)==FALSE && blue>red && Bid<red && green<close26 && isho_trend(frame)=="sell" && red<span_high && red<span_low)out="sell";
}
if(stoch_db(time_in)<100){
if(red_last<=blue_last && blue<red && Bid>red && green>close26 && in_cloud(frame)==FALSE)out="buy";
if(in_cloud(frame,1)==TRUE && in_cloud(frame)==FALSE && blue<red && Bid>red && green>close26 && isho_trend(frame)=="buy" && red>span_low && red>span_high)out="buy";
}
}
return out;
}
string b_flat(){
string out="null";
double b0=(bband(time_in,"up",0)-bband(time_in,"down",0))/Point;
double b1=(bband(time_in,"up",1)-bband(time_in,"down",1))/Point;
if(b0-b1<5)out="flat";
//Alert(b0);
if(b0<20)out="flat";
return out;
}
string open_order(string in, string oo="null"){
string comm=StringConcatenate("iSHO ",time_in," tr H4-",isho_trend(240)," tr H1-",isho_trend(60));
if(MarketInfo(Symbol(),MODE_SPREAD)<max_spreed && b_flat()!="flat"){
if(in=="sell"
// && to_price(make_take(240,"sell"))/to_price(stop_lost_f("OP_SELL"))>min_open
)OrderSend(Symbol(),OP_SELL,make_lot("OP_SELL"),Bid,3,stop_lost_f("OP_SELL"),make_take(240,"sell"), comm,12345,0,Red);
if(in=="buy"
// && to_price(make_take(240,"buy"))/to_price(stop_lost_f("OP_BUY"))>min_open
)OrderSend(Symbol(),OP_BUY,make_lot("OP_BUY"),Ask,3,stop_lost_f("OP_BUY"),make_take(240,"buy"), comm,12345,0,Green);
}
return 0;
}
string open_order2(string in, string oo="null"){
string comm=StringConcatenate("new ",time_in," ",oo," tr H4-",isho_trend(240)," tr H1-",isho_trend(60));
// double pricetop=ObjectGet("top",OBJPROP_PRICE1);
//double pricebottom=ObjectGet("bottom",OBJPROP_PRICE2);
double pricetop=ObjectGet(oo,OBJPROP_PRICE2)+MarketInfo(Symbol(),MODE_SPREAD)*Point+10*Point;
double pricebottom=ObjectGet(oo,OBJPROP_PRICE1)-10*Point;
pricetop=find_max(5)+MarketInfo(Symbol(),MODE_SPREAD)*Point+10*Point;
pricebottom=find_min(5)-10*Point;
if(to_price(pricetop)<MarketInfo(Symbol(),MODE_STOPLEVEL))pricetop=Bid+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point+10*Point;
if(to_price(pricebottom)<MarketInfo(Symbol(),MODE_STOPLEVEL))pricebottom=Ask-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point-10*Point;
if(MarketInfo(Symbol(),MODE_SPREAD)<max_spreed){
if(in=="sell"
// && to_price(make_take(240,"sell"))/to_price(stop_lost_f("OP_SELL"))>min_open
// stop_lost_f("OP_SELL")
){
OrderSend(Symbol(),OP_SELL,make_lot2("OP_SELL",pricetop),Bid,3,pricetop,0, comm,12345,0,Red);
OrderSend(Symbol(),OP_BUYSTOP,make_lot2("OP_SELL",pricetop),pricetop,3,Bid,0, comm,12345,0,Red);
}
if(in=="buy"
// && to_price(make_take(240,"buy"))/to_price(stop_lost_f("OP_BUY"))>min_open
// stop_lost_f("OP_BUY")
){OrderSend(Symbol(),OP_BUY,make_lot2("OP_BUY",pricebottom),Ask,3,pricebottom,0, comm,12345,0,Green);
OrderSend(Symbol(),OP_SELLSTOP,make_lot2("OP_BUY",pricebottom),pricebottom,3,Ask,0, comm,12345,0,Green);
}
}
return 0;
}
// проверка лота
double make_lot(string to){
int points=to_price(stop_lost_f(to),to);
double max_money;
if(from_balance==TRUE)
max_money=AccountBalance()*risk_proc/100;
else max_money=AccountEquity()*risk_proc/100;
double price1=MarketInfo(Symbol(),MODE_TICKVALUE);
double out_lot=max_money/points/price1;
out_lot=NormalizeDouble(MathAbs(out_lot),2);
if(out_lot<0.01)
out_lot=0.01;
return out_lot;
}
double make_lot2(string to,double stop_price){
int points=to_price(stop_price,to);
double max_money;
if(from_balance==TRUE)
max_money=AccountBalance()*risk_proc/100;
else max_money=AccountEquity()*risk_proc/100;
double price1=MarketInfo(Symbol(),MODE_TICKVALUE);
double out_lot=max_money/points/price1;
out_lot=NormalizeDouble(MathAbs(out_lot),2);
if(out_lot<0.01)
out_lot=0.01;
return out_lot;
}
// установка стоплоса аллигатор
double stop_lost_f(string or="null"){
double out,out2;
//if(or!="null"){
if(or=="OP_BUY"){
out=iLow(Symbol(),first_frame,iLowest(Symbol(),first_frame,MODE_LOW,first_num,0));
out2=find_min(stop_num);
if(out2<out)out=out2;
out=out-7*Point;
//if(to_price(out,"OP_BUY")>max_stop)out=Ask-max_stop*Point;
if(to_price(out)<MarketInfo(Symbol(),MODE_STOPLEVEL))out=Ask-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point;
}
if(or=="OP_SELL"){
out=iHigh(Symbol(),first_frame,iHighest(Symbol(),first_frame,MODE_HIGH,first_num,0));
//if(to_price(out)>max_stop)out=Bid+max_stop*Point;
out2=find_max(stop_num);
if(out2>out)out=out2;
out=out+MarketInfo(Symbol(),MODE_SPREAD)*Point+7*Point;
if(to_price(out)<MarketInfo(Symbol(),MODE_STOPLEVEL))out=Bid+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point;
}
//out=0;
return out;
}
double bband(int frame, string to,int shift=0){
double out;
if(to=="up")
out=iBands(Symbol(),frame,20,2,0,PRICE_CLOSE,MODE_UPPER,shift);
else out=iBands(Symbol(),frame,20,2,0,PRICE_CLOSE,MODE_LOWER,shift);
//out=0;
return out;
}
double make_take(int frame, string to,int shift=0){
double out;
if(to=="buy")
out=iBands(Symbol(),frame,20,2,0,PRICE_CLOSE,MODE_UPPER,shift);
else out=iBands(Symbol(),frame,20,2,0,PRICE_CLOSE,MODE_LOWER,shift);
out=0;
return out;
}
// до цены Новый
int to_price(double price,string to="OP_SELL"){
double my_price=Bid;
if(to=="OP_BUY")my_price=Ask;
return MathAbs((price-my_price)/Point);
}
bool in_cloud(int frame, int shift=0){
bool out=FALSE;
double span_a=iIchimoku(Symbol(),frame,9,26,52,MODE_SENKOUSPANA,shift);
double span_b=iIchimoku(Symbol(),frame,9,26,52,MODE_SENKOUSPANB,shift);
double span_b_last=iIchimoku(Symbol(),frame,9,26,52,MODE_SENKOUSPANB,1);
double blue=iIchimoku(Symbol(),frame,9,26,52,MODE_KIJUNSEN,shift);
double price;
if(shift==0)price=Bid;
else price=iClose(Symbol(),frame,shift);
double span_high,span_low;
if(span_a>span_b){span_high=span_a;span_low=span_b;}
else{span_high=span_b;span_low=span_a;}
if(price>span_low && price<span_high)out=TRUE;
return out;
}
string make_stop(int id){
OrderSelect(id,SELECT_BY_TICKET,MODE_TRADES);
double span_a=iIchimoku(Symbol(),frame_stop,9,26,52,MODE_SENKOUSPANA,0);
double span_b=iIchimoku(Symbol(),frame_stop,9,26,52,MODE_SENKOUSPANB,0);
double span_b_last=iIchimoku(Symbol(),frame_stop,9,26,52,MODE_SENKOUSPANB,1);
double blue=iIchimoku(Symbol(),frame_stop,9,26,52,MODE_KIJUNSEN,0);
double red=iIchimoku(Symbol(),frame_stop,9,26,52,MODE_TENKANSEN,0);
double span_high,span_low;
if(span_a>span_b){span_high=span_a;span_low=span_b;}
else{span_high=span_b;span_low=span_a;}
blue=red;
if(stop_blue==TRUE){span_high=blue;span_low=blue;}
if(OrderType()==OP_BUY){
if(Bid>span_high && to_price(span_low,"OP_BUY")>50 && span_low-OrderOpenPrice()>10*Point && span_low>OrderStopLoss()
&& stoch_db(1)<50
)
OrderModify(OrderTicket(),OrderOpenPrice(),span_low-5*Point,OrderTakeProfit(),0,clrDarkViolet);
}
//Alert(OrderType());
if(OrderType()==OP_SELL){
double set_stop=span_high+MarketInfo(Symbol(),MODE_SPREAD)*Point+7*Point;
if(
span_low>Ask &&
to_price(span_high)>50 && OrderOpenPrice()-set_stop>10*Point && (set_stop<OrderStopLoss() || OrderStopLoss()==0)
&& stoch_db(1)>50
){
OrderModify(OrderTicket(),OrderOpenPrice(),set_stop,OrderTakeProfit(),0,clrDarkViolet);
// Alert("Ok");
}
}
return 0;
//Alert(Symbol()," ",to_price(span_b)," ",OrderOpenPrice()-span_b);
}
bool make_line(string name,double price,color col=Magenta,string dis=""){
ObjectDelete(name);
ObjectCreate(name,OBJ_HLINE,0,0,price);
ObjectSet(name,OBJPROP_COLOR,col);
ObjectSet(name,OBJPROP_STYLE,STYLE_DASHDOTDOT);
ObjectSetString(0,name,OBJPROP_TEXT,dis);
return true;
}
bool RectangleCreate(const long chart_ID=0, // ID графика
const string name="Rectangle", // имя прямоугольника
const int sub_window=0, // номер подокна
datetime time1=0, // время первой точки
double price1=0, // цена первой точки
datetime time2=0, // время второй точки
double price2=0, // цена второй точки
const color clr=clrOrange, // цвет прямоугольника
const ENUM_LINE_STYLE style=STYLE_SOLID, // стиль линий прямоугольника
const int width=1, // толщина линий прямоугольника
const bool fill=true, // заливка прямоугольника цветом
const bool back=true, // на заднем плане
const bool selection=true, // выделить для перемещений
const bool hidden=false, // скрыт в списке объектов
const long z_order=0) // приоритет на нажатие мышью
{
//--- установим координаты точек привязки, если они не заданы
//ChangeRectangleEmptyPoints(time1,price1,time2,price2);
//--- сбросим значение ошибки
ResetLastError();
//--- создадим прямоугольник по заданным координатам
if(!ObjectCreate(chart_ID,name,OBJ_RECTANGLE,0,time1,price1,time2,price2))
{
Print(__FUNCTION__,
": не удалось создать прямоугольник! Код ошибки = ",GetLastError());
return(false);
}
//--- установим цвет прямоугольника
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- установим стиль линий прямоугольника
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- установим толщину линий прямоугольника
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- отобразим на переднем (false) или заднем (true) плане
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- включим (true) или отключим (false) режим выделения прямоугольника для перемещений
//--- при создании графического объекта функцией ObjectCreate, по умолчанию объект
//--- нельзя выделить и перемещать. Внутри же этого метода параметр selection
//--- по умолчанию равен true, что позволяет выделять и перемещать этот объект
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- установим приоритет на получение события нажатия мыши на графике
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- успешное выполнение
return(true);
}
//+------------------------------------------------------------------+
//| Перемещает точку привязки прямоугольника |
//+------------------------------------------------------------------+
bool RectanglePointChange(const long chart_ID=0, // ID графика
const string name="Rectangle", // имя прямоугольника
const int point_index=0, // номер точки привязки
datetime time=0, // координата времени точки привязки
double price=0) // координата цены точки привязки
{
//--- если координаты точки не заданы, то перемещаем ее на текущий бар с ценой Bid
if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- сбросим значение ошибки
ResetLastError();
//--- переместим точку привязки
if(!ObjectMove(chart_ID,name,point_index,time,price))
{
Print(__FUNCTION__,
": не удалось переместить точку привязки! Код ошибки = ",GetLastError());
return(false);
}
//--- успешное выполнение
return(true);
}
void my_ret(){
}
bool RectangleDelete(const long chart_ID=0, // ID графика
const string name="Rectangle") // имя прямоугольника
{
//--- сбросим значение ошибки
ResetLastError();
//--- удалим прямоугольник
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": не удалось удалить прямоугольник! Код ошибки = ",GetLastError());
return(false);
}
//--- успешное выполнение
return(true);
}
//+------------------------------------------------------------------+