extern int Dolivka = 1; // 1-есть доливки 0-нет
extern int Dolivka = 1; // 1-есть доливки 0-нет
Трейлинг может осуществляться по фракталам, по экстремумам прошлых баров или по указанному количеству пунктов. Может запускаться как отдельный советник или скрипт, совместно с любым советником.
extern int IndPeriod = 12; // период Fisher
extern int IndShift = 3; // сдвиг Fisher
прикладываю подобный скрипт(не эксперт) но там нет этой функции
а вы скрипты не пишите?
1-открыл ордер на Bay и Sell хотя сигнала небыло
На втором рисунке он вообще начал открывать и закрывать ордера как хочет
можно так сделать чтобы на каждую сделку был тейк… стоп трал? а не на все сделки вместе 1 трал?
//+------------------------------------------------------------------+
//| Delta2MA.mq4 |
//| Copyright 2015, AM2 |
//| http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2015, AM2"
#property link "http://www.forexsystems.biz"
#property description "Simple expert advisor"
extern int Magic = 20150914;
extern int StopLoss = 1200;
extern int TakeProfit = 1400;
extern int Delta = 400;
extern int PipStep = 100;
extern int TrailingStop = 0;
extern int Slip = 50;
extern int MA1Period = 9;
extern int MA2Period = 22;
extern double Lots = 0.1;
int CrossUP=0,CrossDN=0;
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
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()==OP_BUY || OrderType()==OP_SELL)
count++;
}
}
}
return(count);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int FindOrderType()
{
int oticket,ticketNumber=0,type=0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
oticket=OrderTicket();
if(oticket>ticketNumber)
{
ticketNumber=oticket;
type=OrderType();
}
}
}
}
return(type);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double FindLastBuyPrice()
{
int oticket,ticketNumber=0;
double oprice=0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==OP_BUY)
{
oticket=OrderTicket();
if(oticket>ticketNumber)
{
ticketNumber=oticket;
oprice=OrderOpenPrice();
}
}
}
}
return(oprice);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double FindLastSellPrice()
{
int oticket,ticketNumber=0;
double oprice=0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==OP_SELL)
{
oticket=OrderTicket();
if(oticket>ticketNumber)
{
ticketNumber=oticket;
oprice=OrderOpenPrice();
}
}
}
}
return(oprice);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void Trailing()
{
bool mod;
for(int i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() || OrderMagicNumber()==Magic)
{
if(OrderType()==OP_BUY)
{
if(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>TrailingStop*Point)
{
if(OrderStopLoss()<Bid-TrailingStop*Point)
{
mod=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*Point,OrderTakeProfit(),0,Yellow);
return;
}
}
}
}
if(OrderType()==OP_SELL)
{
if(TrailingStop>0)
{
if((OrderOpenPrice()-Ask)>TrailingStop*Point)
{
if((OrderStopLoss()>(Ask+TrailingStop*Point)) || (OrderStopLoss()==0))
{
mod=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TrailingStop*Point,OrderTakeProfit(),0,Yellow);
return;
}
}
}
}
}
}
}
}
//+------------------------------------------------------------------+
//| Check for open order conditions |
//+------------------------------------------------------------------+
void OpenPos()
{
int res;
double sl=0,tp=0;
//---- get Indicatorrs
double ma11=iMA(NULL,0,MA1Period,0,0,0,1);
double ma21=iMA(NULL,0,MA2Period,0,0,0,1);
double delta=MathAbs((ma11-ma21)/Point);
//---- buy
if(CrossUP>0 && delta>Delta)
{
if(StopLoss>0) sl=NormalizeDouble(Ask-StopLoss*Point,Digits);
if(TakeProfit>0) tp=NormalizeDouble(Ask+TakeProfit*Point,Digits);
res=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slip,sl,tp,"",Magic,0,Blue);
return;
}
//---- sell
if(CrossDN>0 && delta>Delta)
{
if(StopLoss>0) sl=NormalizeDouble(Bid+StopLoss*Point,Digits);
if(TakeProfit>0) tp=NormalizeDouble(Bid-TakeProfit*Point,Digits);
res=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),Slip,sl,tp,"",Magic,0,Red);
return;
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CloseAll()
{
bool cl;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderMagicNumber()==Magic || OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY) cl=OrderClose(OrderTicket(),OrderLots(),Bid,Slip,Blue);
if(OrderType()==OP_SELL) cl=OrderClose(OrderTicket(),OrderLots(),Ask,Slip,Red);
return;
}
}
}
}
//+------------------------------------------------------------------+
//| Check for close order conditions |
//+------------------------------------------------------------------+
void ClosePos()
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderMagicNumber()==Magic || OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY)
{
if(CrossDN>0)
{
CloseAll();
}
}
if(OrderType()==OP_SELL)
{
if(CrossUP>0)
{
CloseAll();
}
}
}
}
}
}
//+------------------------------------------------------------------+
//| Start function |
//+------------------------------------------------------------------+
void OnTick()
{
int ticket=0;
double price=0;
//---- get Indicatorrs
double ma11=iMA(NULL,0,MA1Period,0,0,0,1);
double ma21=iMA(NULL,0,MA2Period,0,0,0,1);
double ma12=iMA(NULL,0,MA1Period,0,0,0,2);
double ma22=iMA(NULL,0,MA2Period,0,0,0,2);
double delta=MathAbs((ma11-ma21)/Point);
if(ma11>ma21 && ma12<ma22 && CrossUP<1) {CrossUP++; CrossDN=0;}
if(ma11<ma21 && ma12>ma22 && CrossDN<1) {CrossDN++; CrossUP=0;}
if(CountTrades()<1) OpenPos();
else ClosePos();
if(CountTrades()>0)
{
int otype=FindOrderType();
if(otype==OP_BUY)
{
price=FindLastBuyPrice();
if((Ask-price)/Point>=PipStep)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slip,0,0,"Buy Order",Magic,0,Blue);
}
}
else if(otype==OP_SELL)
{
price=FindLastSellPrice();
if((price-Bid)/Point>=PipStep)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Ask,Slip,0,0,"Sell Order",Magic,0,Red);
}
}
}
if(TrailingStop!=0) Trailing();
Comment("\n CrossUP: ",CrossUP,
"\n CrossDN: ",CrossDN,
"\n Delta: ",delta);
//----
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Delta2MA.mq4 |
//| Copyright 2015, AM2 |
//| http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2015, AM2"
#property link "http://www.forexsystems.biz"
#property description "Simple expert advisor"
extern int Magic = 20150914;
extern int StopLoss = 1200;
extern int TakeProfit = 1400;
extern int Delta = 400;
extern int TrailingStop = 0;
extern int Slip = 50;
extern int MA1Period = 9;
extern int MA2Period = 22;
extern double Lots = 0.1;
int CrossUP=0,CrossDN=0;
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
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()==OP_BUY || OrderType()==OP_SELL)
count++;
}
}
}
return(count);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void Trailing()
{
bool mod;
for(int i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() || OrderMagicNumber()==Magic)
{
if(OrderType()==OP_BUY)
{
if(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>TrailingStop*Point)
{
if(OrderStopLoss()<Bid-TrailingStop*Point)
{
mod=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*Point,OrderTakeProfit(),0,Yellow);
return;
}
}
}
}
if(OrderType()==OP_SELL)
{
if(TrailingStop>0)
{
if((OrderOpenPrice()-Ask)>TrailingStop*Point)
{
if((OrderStopLoss()>(Ask+TrailingStop*Point)) || (OrderStopLoss()==0))
{
mod=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TrailingStop*Point,OrderTakeProfit(),0,Yellow);
return;
}
}
}
}
}
}
}
}
//+------------------------------------------------------------------+
//| Check for open order conditions |
//+------------------------------------------------------------------+
void OpenPos()
{
int res;
double sl=0,tp=0;
//---- get Indicatorrs
double ma11=iMA(NULL,0,MA1Period,0,0,0,1);
double ma21=iMA(NULL,0,MA2Period,0,0,0,1);
double delta = MathAbs((ma11-ma21)/Point);
//---- buy
if(CrossUP>0 && delta>Delta)
{
if(StopLoss>0) sl=NormalizeDouble(Ask-StopLoss*Point,Digits);
if(TakeProfit>0) tp=NormalizeDouble(Ask+TakeProfit*Point,Digits);
res=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slip,sl,tp,"",Magic,0,Blue);
return;
}
//---- sell
if(CrossDN>0 && delta>Delta)
{
if(StopLoss>0) sl=NormalizeDouble(Bid+StopLoss*Point,Digits);
if(TakeProfit>0) tp=NormalizeDouble(Bid-TakeProfit*Point,Digits);
res=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),Slip,sl,tp,"",Magic,0,Red);
return;
}
}
//+------------------------------------------------------------------+
//| Check for close order conditions |
//+------------------------------------------------------------------+
void ClosePos()
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderMagicNumber()==Magic || OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY)
{
if(CrossDN>0)
{
bool c=OrderClose(OrderTicket(),OrderLots(),Bid,Slip,White);
return;
}
}
if(OrderType()==OP_SELL)
{
if(CrossUP>0)
{
c=OrderClose(OrderTicket(),OrderLots(),Ask,Slip,White);
return;
}
}
}
}
}
}
//+------------------------------------------------------------------+
//| Start function |
//+------------------------------------------------------------------+
void OnTick()
{
//---- get Indicatorrs
double ma11=iMA(NULL,0,MA1Period,0,0,0,1);
double ma21=iMA(NULL,0,MA2Period,0,0,0,1);
double ma12=iMA(NULL,0,MA1Period,0,0,0,2);
double ma22=iMA(NULL,0,MA2Period,0,0,0,2);
double delta = MathAbs((ma11-ma21)/Point);
if(ma11>ma21 && ma12<ma22 && CrossUP<1) {CrossUP++; CrossDN=0;}
if(ma11<ma21 && ma12>ma22 && CrossDN<1) {CrossDN++; CrossUP=0;}
if(CountTrades()<1) OpenPos();
else ClosePos();
if(TrailingStop!=0) Trailing();
Comment("\n CrossUP: ",CrossUP,
"\n CrossDN: ",CrossDN,
"\n Delta: ",delta);
//----
}
//+------------------------------------------------------------------+
AM2