735 lines
54 KiB
MQL5
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;
|
|
}
|
|
//+------------------------------------------------------------------+
|