input double Delta=0.17;
Delta = Ma(s1)-Ma(s2);
Delta = ((Close(s1)-Ma(s1))-(Close(s2)-Ma(s2)));
double Ask1=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
double Ask2=SymbolInfoDouble(Symb,SYMBOL_ASK);
double Bid1=SymbolInfoDouble(_Symbol,SYMBOL_BID);
double Bid2=SymbolInfoDouble(Symb,SYMBOL_BID);
double sigma=MathAbs(s1[0]-s2[0])/_Point;
CopyBuffer(ind,0,0,1,s1);
CopyBuffer(ind,1,0,1,s2);
if(PositionsTotal()<1 && sigma>Sigma)
{
if(s1[0]<s2[0])
{
trade.Buy(Lot,_Symbol,Ask1,0,0,"");
trade.Sell(Lot,Symb,Bid1,0,0,"");
}
if(s1[0]>s2[0])
{
trade.Buy(Lot,Symb,Ask1,0,0,"");
trade.Sell(Lot,_Symbol,Bid1,0,0,"");
}
}
if(PositionsTotal()<1)
{
if(s1[0]<s2[0])
{
trade.Buy(Lot,_Symbol,Ask1,0,0,"");
trade.Sell(Lot,Symb,Bid1,0,0,"");
}
if(s1[0]>s2[0])
{
trade.Buy(Lot,Symb,Ask1,0,0,"");
trade.Sell(Lot,_Symbol,Bid1,0,0,"");
}
}
extern ENUM_TIMEFRAMES Tf = PERIOD_H1; // таймфрейм
extern int Correl_Period = 14;
extern double MinCor = 0.50;
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double Correl(string base,string hedge,int shift)
{
shift=0;
double u1=0,l1=0,s_1=0;
int base_bn=iBarShift(base,0,Time[shift],false);
int hedge_bn=iBarShift(hedge,0,Time[shift],false);
for(int i = Correl_Period - 1; i >= 0; i--){
u1 +=(iClose(base,Tf,base_bn+i)-iMA(base,Tf,Correl_Period,0,MODE_SMA,PRICE_CLOSE,base_bn+i))*
(iClose(hedge,Tf,hedge_bn+i)-iMA(hedge,Tf,Correl_Period,0,MODE_SMA,PRICE_CLOSE,hedge_bn+i));
l1 += MathPow(iClose(base,Tf,base_bn+i)-iMA(base,Tf,Correl_Period,0,MODE_SMA,PRICE_CLOSE,base_bn+i),2);
s_1 += MathPow(iClose(hedge,Tf,hedge_bn+i)-iMA(hedge,Tf,Correl_Period,0,MODE_SMA,PRICE_CLOSE,hedge_bn+i),2);
}
double dMathSqrt = MathSqrt(l1*s_1);
if(dMathSqrt > 0)
return(u1 / dMathSqrt);
return(0);
}
//+------------------------------------------------------------------+
<code> #property copyright "Copyright 2019, AM2" #property link "http://www.forexsystems.biz" #property version "1.00" #property strict //--- Inputs extern int BuySell = 0; // 0-buy 1-sell extern double Lots = 0.1; // лот extern int StopLoss = 333; // лось extern int TakeProfit = 444; // язь extern int StartHour = 0; // час начала торговли extern int StartMin = 30; // минута начала торговли extern int EndHour = 23; // час окончания торговли extern int EndMin = 30; // минута окончания торговли extern int Slip = 0; // реквот extern int Magic = 123; // магик extern int CloseOn = 0; // 1-закрытие в конце работы extern bool MonDay = true; extern bool TuesDay = true; extern bool WednesDay = true; extern bool ThursDay = true; extern bool FriDay = true; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- Comment(""); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { Comment(""); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool Trade() { if(DayOfWeek()==1 && MonDay) return(true); if(DayOfWeek()==2 && TuesDay) return(true); if(DayOfWeek()==3 && WednesDay) return(true); if(DayOfWeek()==4 && ThursDay) return(true); if(DayOfWeek()==5 && FriDay) return(true); return(false); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void PutOrder(int type,double price,double stopLoss,double takeProfit) { int r=0; color clr=Green; double sl=0,tp=0; if(type==1 || type==3 || type==5) { clr=Red; if(StopLoss>0) sl=NormalizeDouble(price+StopLoss*Point,Digits); if(TakeProfit>0) tp=NormalizeDouble(price-TakeProfit*Point,Digits); } if(type==0 || type==2 || type==4) { clr=Blue; if(StopLoss>0) sl=NormalizeDouble(price-StopLoss*Point,Digits); if(TakeProfit>0) tp=NormalizeDouble(price+TakeProfit*Point,Digits); } r=OrderSend(NULL,type,Lots,NormalizeDouble(price,Digits),Slip,sl,tp,"",Magic,0,clr); return; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int CountTrades(){ int count=0; for(int i=OrdersTotal()-1;i>=0;i--){ if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){ if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) { if(OrderType()<2) count++; } } } return(count); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void CloseAll(int ot=-1){ bool cl; for(int i=OrdersTotal()-1;i>=0;i--){ if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){ if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic){ if(OrderType()==0 && (ot==0 || ot==-1)) { RefreshRates(); cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),Slip,White); } if(OrderType()==1 && (ot==1 || ot==-1)) { RefreshRates(); cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slip,White); } } } } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool TimeSession(int aStartHour,int aStartMinute,int aStopHour,int aStopMinute,datetime aTimeCur) { //--- время начала сессии int StartTime=3600*aStartHour+60*aStartMinute; //--- время окончания сессии int StopTime=3600*aStopHour+60*aStopMinute; //--- текущее время в секундах от начала дня aTimeCur=aTimeCur%86400; if(StopTime<StartTime) { //--- переход через полночь if(aTimeCur>=StartTime || aTimeCur<StopTime) { return(true); } } else { //--- внутри одного дня if(aTimeCur>=StartTime && aTimeCur<StopTime) { return(true); } } return(false); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { if(!TimeSession(StartHour,StartMin,EndHour,EndMin,TimeCurrent()) && CloseOn>0) { CloseAll(); } if(Trade() && CountTrades()<1) { if(TimeSession(StartHour,StartMin,EndHour,EndMin,TimeCurrent())) { if(BuySell==0) PutOrder(0,Ask,StopLoss,TakeProfit); if(BuySell==1) PutOrder(1,Bid,StopLoss,TakeProfit); } } Comment("\n Time: ",TimeCurrent()); } //+----------------------------------------------------------------------------+ </code>
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
if(TrailingStop>0)// если TrailingStop>0 тогда используется трал
TrailingAll();
// начало перебора условий для открытия и открытие позиции
if(CountTrades()<1)// если нет позиций!!!
{
if(LastDealResult()==2 && LastDealType()==2)//если последняя позиции закрылась с убытком и эта была продажа
{
PutOrder(0,Ask);//тогда покупаем
}
if(LastDealResult()==2 && LastDealType()==1)//если последняя позиции закрылась с убытком и эта была покупка
{
PutOrder(1,Bid);//тогда продаем
}
// в том случае если раньше небыло позици до этого или позиция закрылась с прибылью, тогда
if((Close[0]>Open[0] && BuySell==0)||(BuySell==1))//если на текущем баре текущая цена больше цены открытия и разрешены покупки или разрешены покупки и продажи
{
PutOrder(0,Ask);//тогда покупаем
}
if((Close[0]<Open[0] && BuySell==0)||(BuySell==2))//если на текущем баре текущая цена меньше цены открытия и разрешены продажи или разрешены покупки и продажи
{
PutOrder(1,Bid);//тогда продаем
}
}//конец перебора условий для открытия и открытие позиции
Comment("\n Lot: ",Lot());
}
//+------------------------------------------------------------------+
2.Не надо делать много отступлений (лирики, тем более принижаться).
3.Старайтесь писать короткими предложениями. Строго по сути.
4.Не надо разбирать все проблемы сразу. Начните с какой то одной и так шаг за
шагом.
5.Когда будете писать сообщение то обратите внимание: над окном есть слово «code» вот с помощью этой опции можно вставить код. Если не помещается весь
сразу разбейте на части, только не делите функции на части.
6.Дайте ссылку на оригинал советника.Кодов много все по названиям не упомнишь.
ssg