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

735 lines
54 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;
input double lot=0.15;
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;
int pips=0;
int handle,boli_h;
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;
//---
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);
double Bid=SymbolInfoDouble(_Symbol,SYMBOL_BID);
double 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)>SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL))
{
stop=h_ask+2*_Point;
is_stop=1;
}
else
stop=Ask+(SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL)+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)>SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL))
{
stop=stop-2*_Point;
//is_stop=1;
}
else
*/
stop=Bid-(SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL)+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_bot=SymbolInfoDouble(_Symbol,SYMBOL_BIDLOW);
l_top=SymbolInfoDouble(_Symbol,SYMBOL_ASKHIGH);
if(Bid-l_top>10*_Point)
{
Alert("rrr");
if(selllot==0)
selllot=0.1;
if(order_buy_c==0)
trade.Buy(selllot,NULL,0,red[0],0,"buy_line_top");
}
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";
ObjectMove(0,"my_line",0,0,n236);
// сделки
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 && 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 && profit_point(Bid,last_open_price)>SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL)*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 && 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 && profit_point(Ask,last_open_price)>SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL)*1.5){
trade.Sell(lot,NULL,0,0,0,"sell_line_my(fib)");
last_open_price=Ask;}
s_o_b="sell";
}
if(l_bot-Bid>10*_Point)
{
Alert("rrr");
if(buylot==0)
buylot=0.1;
if(order_sell_c==0)
trade.Sell(buylot,NULL,0,red[0],0,"sell_line_bot");
}
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(Ask,last_open_price)>SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL)*1.5){
double tr_lot=buylot-selllot;
if(my_line<n236){
double mstop=Ask+SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL)*1.5*_Point;
// mstop=0;
trade.Sell(tr_lot,NULL,0,mstop,0,"sell_bid_line");
last_open_price=Ask;}}
//s_o_b="sell";
}
ObjectMove(0,"bid_line_top",0,0,h_bid_top);
if(l_top!=h_bid_top && Bid<h_bid)h_bid=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)>SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL)*1.5){
double tr_lot=selllot-buylot;
if(my_line>n236){
double mstop=Bid-SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL)*1.5*_Point;
//mstop=0;
trade.Buy(tr_lot,NULL,0,mstop,0,"buy_bid_line");
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="buy";
if(order_buy_c<=trades && MathAbs(profit_point(Bid,last_open_price))>SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL)*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="sell";
ObjectMove(0,"top_rect",1,TimeCurrent(),ihigh);
if(order_sell_c<=trades && profit_point(Ask,last_open_price)>SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL)*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"
// && green[26]>iClose(NULL,frame,26)
&& order_buy_c<=trades && profit_point(Ask,last_open_price)>SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL)*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)<SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL))
s_stop=SymbolInfoDouble(_Symbol,SYMBOL_BID)-(SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL)+10)*_Point;
s_stop=0;
trade.Buy(lot2,NULL,0,s_stop,0,"main");
last_open_price=Bid;
}
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"
// && green[26]<iClose(NULL,frame,26)
&& order_sell_c<=trades && profit_point(Ask,last_open_price)>SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL)*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)<SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL))
s_stop=SymbolInfoDouble(_Symbol,SYMBOL_ASK)+(SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL)+10)*_Point;
trade.Sell(lot2,NULL,0,s_stop,0,"main");
last_open_price=Ask;
}
// if(check_close()!="null")Alert("cl",check_close());
// if(check_trend(1,0)!=check_trend(1,1))Alert(check_trend(1));
/*
double nowpr=ObjectGetDouble(0,"top",OBJPROP_PRICE);
if(nowpr<max_p())
ObjectMove(0,"top",0,0,max_p());
double nowpr2=ObjectGetDouble(0,"low",OBJPROP_PRICE);
if(nowpr2>low_p())
ObjectMove(0,"low",0,0,low_p());
nowpr=ObjectGetDouble(0,"top",OBJPROP_PRICE);
*/
//double Bid=SymbolInfoDouble(_Symbol,SYMBOL_BID);
/*
double niz1,niz2,niz3;
string s_niz2,s_niz3;
niz1=red[0];
niz2=blue[0];
niz3=span_a[0];
if(Bid<span_a[0])
{
niz2=get_boli(PERIOD_M5,0);
niz3=get_boli(PERIOD_M5,2);
s_niz2="bol5 middle";
s_niz3="bol5 niz";
}
if(Bid<niz2)
{
niz2=get_boli(PERIOD_M15,0);
niz3=get_boli(PERIOD_M15,2);
s_niz2="bol15 middle";
s_niz3="bol15 niz";
}
ObjectMove(0,"niz1",0,0,niz1);
ObjectSetString(0,"niz1",OBJPROP_TEXT,"по ");
ObjectMove(0,"niz2",0,0,niz2);
ObjectSetString(0,"niz2",OBJPROP_TEXT,"по "+s_niz2);
ObjectMove(0,"niz3",0,0,niz3);
ObjectSetString(0,"niz3",OBJPROP_TEXT,"по "+s_niz3);
double bo=get_boli(frame,1);
double boli2,boli3;
string b2st,b3st;
boli2=get_boli(PERIOD_M5,1);
boli3=get_boli(PERIOD_M15,1);
if(boli2>boli3)
boli3=get_boli(PERIOD_H1,1);
ObjectMove(0,"vverh1",0,0,bo);
ObjectMove(0,"vverh2",0,0,boli2);
ObjectMove(0,"vverh3",0,0,boli3);
ObjectSetString(0,"vverh1",OBJPROP_TEXT,"по boli1");
ObjectSetString(0,"vverh2",OBJPROP_TEXT,"boli2");
ObjectSetString(0,"vverh3",OBJPROP_TEXT,"по bolih1");
*/
/*
if(profit_point(h_ask,Ask)>SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL) && Bid<get_boli(frame,0) && h_ask>red[0] && order_sell_c<trades
&& MathAbs(profit_point(Ask,last_open_price))>SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL)*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)));
if(iOpen(_Symbol,PERIOD_D1,1)<iClose(_Symbol,PERIOD_D1,1))
{
l_top=SymbolInfoDouble(_Symbol,SYMBOL_BIDLOW);
l_bot=SymbolInfoDouble(_Symbol,SYMBOL_ASKHIGH);
}
Fibo.Create(0,"fib",0,iTime(NULL,PERIOD_D1,1),l_bot,TimeCurrent(),l_top);
ObjectMove(0,"open_line",0,0,day_open);
//Fibo.SetPoint(0,iTime(NULL,PERIOD_D1,1),SymbolInfoDouble(_Symbol,SYMBOL_BIDLOW));
Comment(s_o_b+check_trend(frame), "-",selllot,":",h_ask,"-",profit_point(h_ask,Ask),":",profit_point(Ask,last_open_price),"-p",allprofit);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
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)SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL);
//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];
}
// 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;
}
//+------------------------------------------------------------------+