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

800 lines
No EOL
57 KiB
MQL5

//+------------------------------------------------------------------+
//| isho.mq5 |
//| Copyright 2020, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
input ENUM_TIMEFRAMES frame=PERIOD_M1;
input ENUM_TIMEFRAMES open_frame=PERIOD_H1;
input ENUM_TIMEFRAMES order_open_frame=PERIOD_M1;
extern double lot=0.01;
double red[],blue[],span_a[],span_b[],green[],Bands[],Bid, h_ask,h_bid,h_bid_top,last_open_price=0,high_open=0,high_open_id=0,low_open=100000,low_open_id=0,Ask;
int pips=0;
int handle,boli_h,min_spread;
int order_buy_c, order_sell_c;
extern string s_o_b="null";
input bool tr_stop=true;
input double Money_FixRisk_Percent=0.5;
input int trades=3;
#include<Trade\SymbolInfo.mqh>
#include<Trade\AccountInfo.mqh>
#include<Trade\Trade.mqh>
#include <ChartObjects\ChartObjectsFibo.mqh>
#include<Trade\PositionInfo.mqh>
#include<Expert\Money\MoneyFixedRisk.mqh>
CTrade trade;
CSymbolInfo m_symbol;
CMoneyFixedRisk money;
CPositionInfo position;
CChartObjectFibo Fibo;
int OnInit()
{
//---
EventSetTimer(1);
handle=iIchimoku(NULL,frame,9,26,52);
if(handle<0)
{
Print("Объект iMA не создан: MA_handle= ",INVALID_HANDLE);
Print("Ошибка исполнения = ",GetLastError());
//--- принудительное завершение программы
return(-1);
}
boli_h=iBands(NULL,frame,20,0,2,PRICE_CLOSE);
if(boli_h<0)
{
Print("Объект iMA не создан: MA_handle= ",INVALID_HANDLE);
Print("Ошибка исполнения = ",GetLastError());
//--- принудительное завершение программы
return(-1);
}
m_symbol.Name(Symbol());
m_symbol.Refresh();
int digits_adjust=1;
money.Init(GetPointer(m_symbol),Period(),m_symbol.Point()*digits_adjust);
// return(INIT_FAILED);
string pr=ObjectGetString(0,"my",OBJPROP_TEXT);
double Money_FixRisk_Percent2=Money_FixRisk_Percent;
if(StringToDouble(pr)>0)
Money_FixRisk_Percent2=StringToDouble(pr);
money.Percent(Money_FixRisk_Percent2);
// h_bid=iLow(_Symbol,PERIOD_M1,iLowest(_Symbol,PERIOD_M1,MODE_LOW,10,1));
h_bid=SymbolInfoDouble(_Symbol,SYMBOL_BIDLOW);
h_bid_top=SymbolInfoDouble(_Symbol,SYMBOL_ASKHIGH);
h_ask=iHigh(_Symbol,PERIOD_M1,iHighest(_Symbol,PERIOD_M1,MODE_HIGH,10,1))+SymbolInfoInteger(_Symbol,SYMBOL_SPREAD)*_Point;
min_spread=SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL);
if(min_spread==0)min_spread=100;
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTimer()
{
//---
// Номера буферов: 0 - TENKANSEN_LINE, 1 - KIJUNSEN_LINE, 2 - SENKOUSPANA_LINE, 3 - SENKOUSPANB_LINE, 4 - CHIKOUSPAN_LINE.
if(CopyBuffer(handle,0,0,3,red)<=0)
return;
ArraySetAsSeries(red,true);
if(CopyBuffer(handle,0,0,3,red)<=0)
return;
ArraySetAsSeries(red,true);
if(CopyBuffer(handle,1,0,3,blue)<=0)
return;
ArraySetAsSeries(blue,true);
if(CopyBuffer(handle,2,0,3,span_a)<=0)
return;
ArraySetAsSeries(span_a,true);
if(CopyBuffer(handle,3,0,3,span_b)<=0)
return;
ArraySetAsSeries(span_b,true);
if(CopyBuffer(handle,4,0,27,green)<=0)return;
ArraySetAsSeries(green,true);
Bid=SymbolInfoDouble(_Symbol,SYMBOL_BID);
Ask=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
long buy_id,sell_id;
ulong ticket;
//string type;
uint total=PositionsTotal();
int order_buy_c=0;
int order_sell_c=0;
double buylot=0,selllot=0,buy_oprice=0,sell_oprice=0,allprofit=0;
int is_stop=0;
//Alert(total);
//--- 1 поиск сделок
for(uint i=0; i<total; i++)
{
//--- получим тикет ордера по его позиции в списке
if((ticket=PositionGetTicket(i))>0)
{
//--- получим свойства ордера
// type =EnumToString(ENUM_ORDER_TYPE(OrderGetInteger(ORDER_TYPE)));
//--- подготовим и выведем информацию об ордере
// Alert(PositionGetInteger(POSITION_TYPE));
if(PositionGetString(POSITION_SYMBOL)==_Symbol)
{
allprofit+=PositionGetDouble(POSITION_PROFIT);
if(PositionGetInteger(POSITION_TYPE)==1)
{
order_sell_c++;
// if(PositionGetDouble(POSITION_PRICE_OPEN)>sell_oprice)PositionGetDouble(POSITION_PRICE_OPEN)
selllot=selllot+PositionGetDouble(POSITION_VOLUME);
sell_id=PositionGetInteger(POSITION_IDENTIFIER);
if(s_o_b=="buy" && PositionGetDouble(POSITION_PROFIT)>0.01)
trade.PositionClose(sell_id);
if(PositionGetString(POSITION_COMMENT)=="sell_bid_line")h_bid=SymbolInfoDouble(_Symbol,SYMBOL_BIDLOW);
if(high_open<PositionGetDouble(POSITION_PRICE_OPEN))
{
high_open=PositionGetDouble(POSITION_PRICE_OPEN);
high_open_id=sell_id;
}
if(PositionGetDouble(POSITION_SL)>PositionGetDouble(POSITION_PRICE_OPEN) || PositionGetDouble(POSITION_SL)==0 || tr_stop==true)
{
double stop;
// double stop=blue[0];
// stop=get_b==oli(frame,0)+SymbolInfoInteger(_Symbol,SYMBOL_SPREAD)*_Point;
// PositionGetInteger(STOP
//
if(profit_point(h_ask,Ask)>min_spread)
{
stop=h_ask+2*_Point;
is_stop=1;
}
else
stop=Ask+(min_spread+2)*_Point;
// if(PositionGetDouble(POSITION_PROFIT)>0 && h_ask>Ask && (PositionGetDouble(POSITION_PRICE_OPEN)-Ask)>0 && (PositionGetDouble(POSITION_PRICE_OPEN)-Ask)<10)h_ask=Ask;
// stop=h_ask+100*_Point;
if(sell_id!=high_open_id && stop>0 || (s_o_b=="low_fib" && order_sell_c==1))
{
if(stop<PositionGetDouble(POSITION_PRICE_OPEN) && (stop<PositionGetDouble(POSITION_SL) || PositionGetDouble(POSITION_SL)==0))
trade.PositionModify(sell_id,stop,PositionGetDouble(POSITION_TP));
}
}
}
else
{
order_buy_c++;
buylot=buylot+PositionGetDouble(POSITION_VOLUME);
buy_id=PositionGetInteger(POSITION_IDENTIFIER);
if(s_o_b=="sell" && PositionGetDouble(POSITION_PROFIT)>0.01)
trade.PositionClose(buy_id);
if(PositionGetString(POSITION_COMMENT)=="buy_bid_line")h_bid_top=SymbolInfoDouble(_Symbol,SYMBOL_ASKHIGH);
if(low_open<PositionGetDouble(POSITION_PRICE_OPEN))
{
low_open=PositionGetDouble(POSITION_PRICE_OPEN);
low_open_id=buy_id;
}
if(PositionGetDouble(POSITION_SL)<PositionGetDouble(POSITION_PRICE_OPEN) || tr_stop==true)
{
double stop=blue[1];
stop=get_boli(frame,0);
/*
if(profit_point(Bid,stop)>min_spread)
{
stop=stop-2*_Point;
//is_stop=1;
}
else
*/
stop=Bid-(min_spread+2)*_Point;
if(stop>get_boli(frame,0)) stop=get_boli(frame,0);
if(buy_id!=low_open_id)
{
if(stop>PositionGetDouble(POSITION_PRICE_OPEN) && stop>PositionGetDouble(POSITION_SL))
trade.PositionModify(buy_id,stop,PositionGetDouble(POSITION_TP));
}
}
}
}
}
}
if(last_open_price==0)
last_open_price=high_open;
double lot2;
double day_open=iOpen(_Symbol,PERIOD_D1,0);
//if(Bid>day_open)s_o_b="buy";
double bot_rect=ObjectGetDouble(0,"bot_rect",OBJPROP_PRICE,0);
//if(Bid<bot_rect){
//ObjectSetDouble(0,"top_rect",OBJPROP_PRICE,1,iHigh(_Symbol,PERIOD_H1,1));
//ObjectSetDouble(0,"top_rect",OBJPROP_PRICE,0,iClose(_Symbol,PERIOD_H1,1));
//Alert((iClose(_Symbol,PERIOD_H1,1)-iLow(_Symbol,PERIOD_H1,1))*_Point);
double ilow=iLow(_Symbol,open_frame,1);
double top_rect=ObjectGetDouble(0,"top_rect",OBJPROP_PRICE,1);
double top_rect_niz=ObjectGetDouble(0,"top_rect",OBJPROP_PRICE,0);
// определение направлений
double l_top,l_bot;
l_top=iHigh(_Symbol,PERIOD_D1,1);
l_bot=iLow(_Symbol,PERIOD_D1,1);
if(SymbolInfoDouble(_Symbol,SYMBOL_ASKHIGH)>l_top)l_top=SymbolInfoDouble(_Symbol,SYMBOL_ASKHIGH);
if(l_bot>SymbolInfoDouble(_Symbol,SYMBOL_BIDLOW)) l_bot=SymbolInfoDouble(_Symbol,SYMBOL_BIDLOW);
// l_top=SymbolInfoDouble(_Symbol,SYMBOL_ASKHIGH);
lot=AccountInfoDouble(ACCOUNT_MARGIN_FREE)/50000;
lot=NormalizeDouble(lot,2);
if(lot<0.01)lot=0.01;
double n236=l_bot+(l_top-l_bot)*0.236;
double t236=l_top-(l_top-l_bot)*0.236;
if(Bid<n236 && Bid>l_bot && s_o_b!="buy"){s_o_b="low_fib";last_top_rect();}
if(Bid>t236 && Bid<l_top && s_o_b!="sell")s_o_b="high_fib";
double n61=l_bot+(l_top-l_bot)*0.618;
double n50=l_bot+(l_top-l_bot)*0.5;
double n38=l_bot+(l_top-l_bot)*0.382;
if(s_o_b=="buy"){open_fib_buy(n61);
open_fib_buy(n50);
open_fib_buy(n38);}
if(s_o_b=="sell"){ open_fib_sell(n38);
open_fib_sell(n61);
open_fib_sell(n50);}
// сделки
double my_line=ObjectGetDouble(0,"my_line",OBJPROP_PRICE);
my_line=n236;
if(iOpen(_Symbol,order_open_frame,1)<my_line && Bid>=my_line)s_o_b="buy";
if(iOpen(_Symbol,order_open_frame,1)<my_line && iOpen(_Symbol,order_open_frame,0)>my_line && (Bid-iHigh(_Symbol,order_open_frame,1))>10*_Point){
if(selllot==0)selllot=0.1;
if(order_buy_c<=trades && profit_point(Bid,last_open_price)>min_spread*1.5){
trade.Buy(lot,NULL,0,0,0,"buy_line_my(fib)");
last_open_price=Ask;}
s_o_b="buy";
}
my_line=t236;
if(iOpen(_Symbol,order_open_frame,0)>my_line && Bid<=my_line)s_o_b="sell";
if(iOpen(_Symbol,order_open_frame,1)>my_line && iOpen(_Symbol,order_open_frame,0)<my_line && (iLow(_Symbol,order_open_frame,1)-Bid)>10*_Point){
if(selllot==0)selllot=0.1;
if(order_sell_c<=trades && profit_point(last_open_price,Ask)>min_spread*1.5){
trade.Sell(lot,NULL,0,0,0,"sell_line_my(fib)");
last_open_price=Ask;}
s_o_b="sell";
}
if(is_stop==1)
{
double new_ask=get_boli(frame,0)+SymbolInfoInteger(NULL,SYMBOL_SPREAD)*_Point;
if(h_ask>new_ask)
h_ask=new_ask;
else
h_ask=Ask;
}
if(h_ask<Ask)
h_ask=Ask;
ObjectMove(0,"ask_line",0,0,h_ask+2*_Point);
// if(h_bid>iLow(_Symbol,PERIOD_M15,iLowest(_Symbol,PERIOD_M15,MODE_LOW,10,1)))
// h_bid=iLow(_Symbol,PERIOD_M15,iLowest(_Symbol,PERIOD_M15,MODE_LOW,10,1));
// ilo
//if(h_bid>Bid)
ObjectMove(0,"bid_line",0,0,h_bid);
if(l_bot!=h_bid && Bid>h_bid)h_bid=SymbolInfoDouble(_Symbol,SYMBOL_BIDLOW);
my_line=h_bid;
if(iOpen(_Symbol,PERIOD_M1,1)>my_line && iClose(_Symbol,order_open_frame,1)<my_line && iOpen(_Symbol,order_open_frame,0)<my_line && (iLow(_Symbol,order_open_frame,1)-Bid)>10*_Point){
if(selllot==0)selllot=0.1;
if(order_sell_c<=trades && order_buy_c>0 && profit_point(last_open_price,Ask)>min_spread*1.5){
double tr_lot=buylot-selllot;
if(my_line<n236){
double mstop=Ask+min_spread*1.5*_Point;
// mstop=0;
trade.Sell(tr_lot,NULL,0,mstop,0,"sell_bid_line");
s_o_b="sell";
last_open_price=Ask;}}
}
//0-UpBuffe 1-down
double up1=get_fraktal(frame,0,6);
//ObjectCreate(0,line,OBJ_TREND,0,1,33,)
ObjectMove(0,"bid_line_top",0,0,h_bid_top);
if(l_top!=h_bid_top && Bid<h_bid)h_bid_top=SymbolInfoDouble(_Symbol,SYMBOL_ASKHIGH);
my_line=h_bid_top;
if(iOpen(_Symbol,order_open_frame,1)<my_line && iClose(_Symbol,order_open_frame,1)>my_line && iOpen(_Symbol,order_open_frame,0)>my_line && (Bid-iHigh(_Symbol,order_open_frame,1))>10*_Point){
if(selllot==0)selllot=0.1;
if(order_buy_c<=trades && order_sell_c>0 && profit_point(Bid,last_open_price)>min_spread*1.5){
double tr_lot=selllot-buylot;
if(my_line>n236){
double mstop=Bid-min_spread*1.5*_Point;
//mstop=0;
trade.Buy(tr_lot,NULL,0,mstop,0,"buy_bid_line");
s_o_b="buy";
last_open_price=Bid;}}
//s_o_b="sell";
}
if(ilow>iLow(_Symbol,open_frame,0))
ilow=iLow(_Symbol,open_frame,0);
if(iOpen(_Symbol,open_frame,1)>iClose(_Symbol,open_frame,1) && (iClose(_Symbol,open_frame,1)-ilow)>10*_Point
&& (Bid-iClose(_Symbol,open_frame,1))>_Point*MathAbs(profit_point(iClose(_Symbol,open_frame,1),iOpen(_Symbol,open_frame,1))/2)
// -&& profit_point(top_rect,Bid)>500
&& s_o_b!="high_fib"
)
{
// s_o_b="buy";
/*
if(order_buy_c<=trades && MathAbs(profit_point(Bid,last_open_price))>min_spread*3)
{
last_open_price=Ask;
trade.Buy(lot,NULL,0,0,0,"bot_tr_change");
}*/
ObjectMove(0,"bot_rect",0,iTime(_Symbol,open_frame,2),ilow);
ObjectMove(0,"bot_rect",1,TimeCurrent(),iClose(_Symbol,open_frame,1));
}
// зачем, if(Bid<bot_rect) s_o_b="sell";
//Alert(top_rect);
//ObjectSetDouble(0,"top_rect",OBJPROP_PRICE,1,iHigh(_Symbol,PERIOD_H1,1));
//ObjectSetDouble(0,"top_rect",OBJPROP_PRICE,0,iClose(_Symbol,PERIOD_H1,1));
double ihigh=iHigh(_Symbol,open_frame,0);
/*
if(Bid<top_rect && Bid>top_rect_niz)
s_o_b="in_top";
if(ihigh>top_rect && Bid<top_rect && Bid>top_rect_niz)
s_o_b="sell";
if(Bid<top_rect_niz && ihigh<top_rect && ihigh>top_rect_niz)
s_o_b="sell";
if(Bid>top_rect)
s_o_b="buy";
if(Bid<n236 && Bid>l_bot && s_o_b!="buy"){s_o_b="low_fib";last_top_rect();}
if(Bid>t236 && Bid<l_top && s_o_b!="sell")s_o_b="high_fib";
*/
if(iOpen(_Symbol,open_frame,0)<top_rect && ihigh>top_rect && Bid<top_rect
&& s_o_b!="low_fib"
)
{ ObjectMove(0,"top_rect",1,TimeCurrent(),ihigh);
/*
s_o_b="sell";
if(order_sell_c<=trades && profit_point(Ask,last_open_price)>min_spread*1.5)
{
last_open_price=Ask;
trade.Sell(lot,NULL,0,0,0,"top_tr_change");
}*/
}
if(ihigh<iHigh(_Symbol,open_frame,1))
ihigh=iHigh(_Symbol,open_frame,1);
if(iOpen(_Symbol,open_frame,1)<iClose(_Symbol,open_frame,1) && (ihigh-iClose(_Symbol,open_frame,1))>10*_Point
&& (iClose(_Symbol,open_frame,1)-Bid)>_Point*MathAbs(profit_point(iClose(_Symbol,open_frame,1),iOpen(_Symbol,open_frame,1))/2))
{
// s_o_b="sell";
ObjectMove(0,"top_rect",0,iTime(_Symbol,open_frame,2),iClose(_Symbol,open_frame,1));
ObjectMove(0,"top_rect",1,TimeCurrent(),ihigh);
}
//}
// blue[1]>=red[1] &&
if(blue[1]>=red[1] && red[0]>=blue[0] && red[0]>=red[1] && Bid>red[0]
//&& check_trend(PERIOD_M1)=="buy"
// && check_trend(PERIOD_M5)=="up_red"
&& (s_o_b=="buy"
// || s_o_b=="low_fib"
)
// && green[26]>iClose(NULL,frame,26)
&& order_buy_c<=trades && profit_point(Ask,last_open_price)>min_spread*1.5) //trade.PositionClose(sell_id);
{
//if(Bid>span_a[0])lot2=lot*2; else
lot2=lot;
double s_stop=first_stop(span_b[0],"buy");
// lot2=money.CheckOpenLong(SymbolInfoDouble(NULL,SYMBOL_BID),s_stop);
s_stop=0;
// s_stop=get_boli(PERIOD_M1,2,0,"low");
if(profit_point(SymbolInfoDouble(_Symbol,SYMBOL_BID),s_stop)<min_spread)
s_stop=SymbolInfoDouble(_Symbol,SYMBOL_BID)-(min_spread+10)*_Point;
s_stop=0;
trade.Buy(lot2,NULL,0,s_stop,0,"main");
last_open_price=Bid;
s_o_b="buy";
}
if(blue[1]<=red[1] && blue[0]>=red[0] && Bid<red[0] && red[1]>red[0]
//&& check_trend(PERIOD_M1)=="sell"
// && check_trend(PERIOD_M5)=="down_red"
&& (s_o_b=="sell"
// || s_o_b=="high_fib"
)
// && green[26]<iClose(NULL,frame,26)
&& order_sell_c<=trades && profit_point(last_open_price,Ask)>min_spread*1.5) //trade.PositionClose(buy_id);
{
//if(Bid<span_a[0])lot2=lot*2;else
lot2=lot;
double s_stop=first_stop(span_b[0],"sell");
// lot2=money.CheckOpenShort(SymbolInfoDouble(NULL,SYMBOL_BID),s_stop);
s_stop=0;
// s_stop=get_boli(PERIOD_M1,1,0,"high");
if(profit_point(SymbolInfoDouble(_Symbol,SYMBOL_ASK),s_stop)<min_spread)
s_stop=SymbolInfoDouble(_Symbol,SYMBOL_ASK)+(min_spread+10)*_Point;
trade.Sell(lot2,NULL,0,s_stop,0,"main");
last_open_price=Ask;
s_o_b="sell";
}
/*
if(profit_point(h_ask,Ask)>min_spread && Bid<get_boli(frame,0) && h_ask>red[0] && order_sell_c<trades
&& MathAbs(profit_point(Ask,last_open_price))>min_spread*1.5
&& s_o_b=="sell"
){
trade.Sell(lot,NULL,0,0,0,"main_h_ask");
last_open_price=Ask;
}
*/
//ObjectMove(0,"my_line",0,0, h_ask=iHigh(_Symbol,PERIOD_M30,iHighest(_Symbol,PERIOD_M30,MODE_HIGH,10,1)));
double l_top2=l_top;
double l_bot2=l_bot;
if(iOpen(_Symbol,PERIOD_D1,1)<iClose(_Symbol,PERIOD_D1,1))
{
l_top2=l_bot;
l_bot2=l_top;
n236=t236;
}
ObjectMove(0,"my_line",0,0,n236);
Fibo.Create(0,"fib",0,iTime(NULL,PERIOD_D1,1),l_bot2,TimeCurrent(),l_top2);
ObjectMove(0,"open_line",0,0,day_open);
//Fibo.SetPoint(0,iTime(NULL,PERIOD_D1,1),SymbolInfoDouble(_Symbol,SYMBOL_BIDLOW));
// SYMBOL_SESSION_BUY_ORDERS_VOLUME
make_fraktal("h1",PERIOD_H1,clrAqua,3);
make_fraktal("m5",PERIOD_M5,clrDarkOrange,1);
make_fraktal("m1",PERIOD_M1,clrYellow,1);
make_fraktal("m30",PERIOD_M30,clrDarkGray,2);
Comment("b",up1,"-",s_o_b+check_trend(frame), "-",selllot,":",h_ask,"-",profit_point(h_ask,Ask),":",profit_point(Ask,last_open_price),"-p",allprofit,"-",SymbolInfoInteger(_Symbol,SYMBOL_SESSION_BUY_ORDERS));
}
double open_fib_buy(double my_line){
//my_line=n236;
if(iOpen(_Symbol,order_open_frame,1)<my_line && Bid>=my_line)s_o_b="buy";
if(iOpen(_Symbol,order_open_frame,1)<my_line && iOpen(_Symbol,order_open_frame,0)>my_line && (Bid-iHigh(_Symbol,order_open_frame,1))>10*_Point){
// if(selllot==0)selllot=0.1;
if(order_buy_c<=trades && profit_point(Bid,last_open_price)>min_spread*1.5){
trade.Buy(lot,NULL,0,0,0,"buy_line_my(fib)");
last_open_price=Ask;}
s_o_b="buy";
}
return 0;
}
double open_fib_sell(double my_line){
if(iOpen(_Symbol,order_open_frame,0)>my_line && Bid<=my_line)s_o_b="sell";
if(iOpen(_Symbol,order_open_frame,1)>my_line && iOpen(_Symbol,order_open_frame,0)<my_line && (iLow(_Symbol,order_open_frame,1)-Bid)>10*_Point){
// if(selllot==0)selllot=0.1;
if(order_sell_c<=trades && profit_point(last_open_price,Ask)>min_spread*1.5){
trade.Sell(lot,NULL,0,0,0,"sell_line_my(fib)");
last_open_price=Ask;}
s_o_b="sell";
} return 0;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double last_top_rect(){
double pr=SymbolInfoDouble(_Symbol,SYMBOL_ASKHIGH)-(SymbolInfoDouble(_Symbol,SYMBOL_ASKHIGH)-SymbolInfoDouble(_Symbol,SYMBOL_BIDLOW))*0.1;
ObjectMove(0,"top_rect",0,iTime(_Symbol,open_frame,2),pr);
ObjectMove(0,"top_rect",1,TimeCurrent(),SymbolInfoDouble(_Symbol,SYMBOL_ASKHIGH));
return 0;
}
double first_stop(double span,string s_b)
{
double Bid=SymbolInfoDouble(_Symbol,SYMBOL_BID);
double out=span;
// Номера буферов: 0 - BASE_LINE, 1 - UPPER_BAND, 2 - LOWER_BAND
double ubands[],lbands[];
CopyBuffer(boli_h,1,0,100,ubands);
//ArraySetAsSeries(ubands,true);
CopyBuffer(boli_h,2,0,100,lbands);
int stops_level=(int)min_spread;
//ArraySetAsSeries(lbands,true);
if(s_b=="sell" && span<Bid)
out=ubands[ArrayMaximum(ubands)]-stops_level*_Point;
if(s_b=="buy" && span>Bid)
out=lbands[ArrayMinimum(lbands)]+stops_level*_Point;
return out;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
string check_trend(ENUM_TIMEFRAMES frame2, int shift=0)
{
string out="null";
int handle2;
handle2=iIchimoku(NULL,frame2,9,26,52);
if(handle2<0)
{
Print("Объект iMA не создан: MA_handle= ",INVALID_HANDLE);
Print("Ошибка исполнения = ",GetLastError());
//--- принудительное завершение программы
return(-1);
}
double blue2[],red2[];
CopyBuffer(handle2,1,0,3,blue2);
ArraySetAsSeries(blue2,true);
CopyBuffer(handle2,0,0,3,red2);
ArraySetAsSeries(red2,true);
double Bid=SymbolInfoDouble(_Symbol,SYMBOL_BID);
if(shift>0)
Bid=iClose(_Symbol,frame2,shift);
/*
if(Bid>blue2[0])out="buy";
if(Bid<blue2[0])out="sell";
*/
int shift2=shift+1;
if(Bid>red2[shift]
//&& Bid<blue2[shift]
)
out="up_red";
if(Bid<red2[shift]
//&& Bid<blue2[shift]
)
out="down_red";
if(red2[shift]>blue2[shift] && Bid>blue2[shift])
out="buy";
if(red2[shift]<blue2[shift] && Bid<blue2[shift])
out="sell";
//if(
//if(Bid>red2[shift] && Bid<blue2[shift])out="bihind r & b";
return out;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
string in_cload(ENUM_TIMEFRAMES frame2,int shift=0)
{
string out="null";
int handle2;
handle2=iIchimoku(NULL,frame2,9,26,52);
if(handle2<0)
{
Print("Объект iMA не создан: MA_handle= ",INVALID_HANDLE);
Print("Ошибка исполнения = ",GetLastError());
//--- принудительное завершение программы
return(-1);
}
double span_a2[],span_b2[],red2[];
CopyBuffer(handle,2,0,3,span_a2);
ArraySetAsSeries(span_a2,true);
CopyBuffer(handle,3,0,3,span_b2);
ArraySetAsSeries(span_b2,true);
CopyBuffer(handle,0,0,3,red2);
ArraySetAsSeries(red2,true);
double span_big,span_low;
if(span_a2[shift]>span_b2[shift])
{
span_big=span_a2[shift];
span_low=span_b2[shift];
}
else
{
span_big=span_b2[shift];
span_low=span_a2[shift];
}
double Bid=SymbolInfoDouble(_Symbol,SYMBOL_BID);
if((red2[shift]>span_low && red2[shift]<span_big) || (Bid>span_low && Bid<span_big))
out="in_cload";
if(red2[shift]>span_big)
out="buy";
if(red2[shift]<span_low)
out="sell";
return out;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
string check_close()
{
string out="null";
double ilow;
// Номера буферов: 0 - BASE_LINE, 1 - UPPER_BAND, 2 - LOWER_BAND
double ubands[],lbands[];
CopyBuffer(boli_h,0,0,2,ubands);
double line=ubands[1];
double bar=iLow(_Symbol,1,1);
double Bid=SymbolInfoDouble(_Symbol,SYMBOL_BID);
if(line>bar && bar-Bid>10*_Point)
out="sell";
return out;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double get_boli(ENUM_TIMEFRAMES bframe,int buffer,int shift=0,string get="null")
{
// Номера буферов: 0 - BASE_LINE, 1 - UPPER_BAND, 2 - LOWER_BAND
int boli_m=iBands(NULL,bframe,20,0,2,PRICE_CLOSE);
if(boli_m<0)
{
Print("Объект iMA не создан: MA_handle= ",INVALID_HANDLE);
Print("Ошибка исполнения = ",GetLastError());
//--- принудительное завершение программы
return(-1);
}
double b_out[];
CopyBuffer(boli_m,buffer,0,20,b_out);
ArraySetAsSeries(b_out,true);
if(get=="low")
shift=ArrayMinimum(b_out);
if(get=="high")
shift=ArrayMaximum(b_out);
return b_out[shift];
}
double get_fraktal(ENUM_TIMEFRAMES bframe,int buffer,int shift=0){
//
int fra=iFractals(NULL,bframe);
if(fra<0)
{
Print("Объект iMA не создан: MA_handle= ",INVALID_HANDLE);
Print("Ошибка исполнения = ",GetLastError());
//--- принудительное завершение программы
return(-1);
}
double fra1[];
CopyBuffer(fra,buffer,0,20,fra1);
ArraySetAsSeries(fra1,true);
return fra1[shift];
}
// line построить по макс
string check_open_trend(ENUM_TIMEFRAMES mframe)
{
double boli=get_boli(mframe,0,0);
return boli;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int profit_point(double fromid, double toid)
{
int out=(fromid-toid)/_Point;
return out;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double max_p()
{
double arr[];
CopyHigh(NULL,PERIOD_M1,1,20,arr);
double a=arr[ArrayMaximum(arr)];
double boli=get_boli(PERIOD_M1,1,0,"high");
if(boli>a)
a=boli;
return a;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double low_p()
{
double arr[];
CopyLow(NULL,PERIOD_M1,1,20,arr);
double a=arr[ArrayMinimum(arr)];
return a;
}
//+------------------------------------------------------------------+
string make_fraktal(string name, ENUM_TIMEFRAMES bframe,color clr=clrRed, int width=1){
//1 - niz fraktal 0-vverh
int top1,top2,niz1,niz2;
top1=get_fraktal_point(bframe,0,1);
top2=get_fraktal_point(bframe,0,2);
niz1=get_fraktal_point(bframe,1,1);
niz2=get_fraktal_point(bframe,1,2);
// Alert("0-"+get_fraktal_point(bframe,0,1)+"-"+get_fraktal_point(PERIOD_CURRENT,0,2));
// Alert("1-"+get_fraktal_point(PERIOD_CURRENT,1,1)+"-"+get_fraktal_point(PERIOD_CURRENT,1,2));
string name_top="top_arr_"+name;
string name_bot="bot_arr_"+name;
ObjectCreate(0,name_top,OBJ_TREND,0,iTime(NULL,bframe,top2),iHigh(NULL,bframe,top2),iTime(NULL,bframe,top1),iHigh(NULL,bframe,top1));
ObjectCreate(0,name_bot,OBJ_TREND,0,iTime(NULL,bframe,niz2),iLow(NULL,bframe,niz2),iTime(NULL,bframe,niz1),iLow(NULL,bframe,niz1));
ObjectSetInteger(0,name_top,OBJPROP_COLOR,clr);
ObjectSetInteger(0,name_top,OBJPROP_WIDTH,width);
ObjectSetInteger(0,name_top,OBJPROP_RAY_RIGHT,true);
ObjectSetInteger(0,name_bot,OBJPROP_COLOR,clr);
ObjectSetInteger(0,name_bot,OBJPROP_WIDTH,width);
ObjectSetInteger(0,name_bot,OBJPROP_RAY_RIGHT,true);
string out="o";
if(top2-top1<10*_Point)out="top_flat";
return out;
}
int get_fraktal_point(ENUM_TIMEFRAMES bframe,int buffer,int shift=0){
//
int fra=iFractals(NULL,bframe);
if(fra<0)
{
Print("Объект iMA не создан: MA_handle= ",INVALID_HANDLE);
Print("Ошибка исполнения = ",GetLastError());
//--- принудительное завершение программы
return(-1);
}
double fra1[];
int i,b=0,max=200;
CopyBuffer(fra,buffer,0,max,fra1);
ArraySetAsSeries(fra1,true);
string out;
for(i=0;i<max;i++){
if(fra1[i]!=EMPTY_VALUE){
b++;
if(shift==b)break;
}
}
// Alert(out);
return i;
}