trade_protector

trade_protector

官方版无广告204

更新日期:2022-10-26分类标签: 语言:中文平台:没限制

23 人已下载 手机查看

trade_protector

// trade assistant – to watch after SL’s for your trades
// some ideas and code fragments: “S.Projects” – “cortex.snowcron.com”

extern int logging=1;
//logging=1 – if you want logs in Experts\Files directory
extern int nInitialSL=15;
// inital SL
extern int nTrailingStop=35;
//nTrailingStop [pips] – initial trailing stop. It will be used until your trade will reach profit = nPropSLThreshold
extern int nPropSLThreshold=12;
//nPropSLThreshold [pips] – after reaching this profit proportional trailing stop will be used
extern double dPropSLRatio=0.35;
//dPropSLRatio [decimal] – multiplying factor ( PropSL = Profit * dPropSLRatio – Spred )
extern int nUseEscape=0;
//nUseEscape [ 1 or 0 ] – escape misplaced trades as soon as they reach some minimal profit
extern int nEscapeLevel=0;
//nEscapeLevel [pips] – lose size after which we want our trade to terminate
//as soon as it will reach next high
extern int nEscapeTP=35;
//nEscapeTP [pips] – take profit level in pips (you can set to negative value
//- then it will be a lose that you would be happy to get,
//in the case your trade reached some impressive negative pips value)
extern int nSleep=0;
//delay after new bar
extern int nSlip = 2;
//maximum price slip allowed

double dEscapeLevel;
double dInitialSL;
double dTrailingStop;
double dEscapeTP;
double dPropSLThreshold;
double dTakeProfit;
double dTakeProfitMin;
double dTakeProfitMax;
double dTakeProfitT;
int nBars, nSpread, nDigits, nBarsSameTrend, nCloseErr, nOpenErr, i;

double dDeltaPrice, dnBid, dnAsk, dSpread, dStopLevel, dMax, dMin, dMacdDelta, dMacd1, dMacd2;

// double dOldBalance, dNewBalance;

int nTakeProfitMax=100;

int nBarsSinceTrade=0;

string strExpert;

// ——

int init ()
{
nBars = Bars;
nSpread = MarketInfo(Symbol(), MODE_SPREAD);
dSpread = NormalizeDouble(nSpread * Point,4);
nDigits = MarketInfo(Symbol(), MODE_DIGITS);
dEscapeTP = NormalizeDouble(nEscapeTP * Point,4);

dEscapeLevel = nEscapeLevel * Point;

strExpert = “tp-1.2.0-“+Symbol()+”-“+Period();

return(0);
}

// ——
int deinit()
{
return(0);
}

// ——

int start()
{

// ——
// to let MT rest a bit after new bar:
Sleep(nSleep*1000);
if(nSleep > 0)
RefreshRates();

dnBid=NormalizeDouble(Bid,nDigits);
dnAsk=NormalizeDouble(Ask,nDigits);

ModifyOrders();

// ——

return(0);
}

// ——

void ModifyOrders()
{
double dSl;
double arrSL[4];
double arrTP[4];

dTrailingStop = NormalizeDouble(nTrailingStop * Point,4);
dEscapeTP = NormalizeDouble(nEscapeTP * Point,4);
dPropSLThreshold = nPropSLThreshold * Point;
dSpread = MarketInfo(Symbol(),MODE_SPREAD) * Point;
dStopLevel = MarketInfo(Symbol(),MODE_STOPLEVEL) * Point;
dInitialSL = NormalizeDouble(nInitialSL * Point,4);

for(int nCnt = 0; nCnt < OrdersTotal(); nCnt++)
{
OrderSelect(nCnt, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() == Symbol() ) //(OrderMagicNumber() == nMagic)
{
if(OrderType() == OP_BUY)
{
dSl=OrderStopLoss();
if( dSl == 0 )
if( dInitialSL != 0)
dSl = dnAsk – dInitialSL;

ArrayResize(arrSL,5);
ArrayInitialize(arrSL,dSl);

LogSL(“OP_BUY-check”,dSl,arrSL[0],arrSL[1],arrSL[2],arrSL[3]);

if( dPropSLRatio > 0 )
{
if( Bid >= (OrderOpenPrice() + dPropSLThreshold) )
{
dSl = NormalizeDouble( OrderOpenPrice() + dPropSLRatio*(Bid – OrderOpenPrice()) – dSpread,4 );
if(OrderStopLoss() < dSl)
arrSL[1]=dSl;
}
else
{
if(dTrailingStop != 0)
arrSL[2]=dnBid – dTrailingStop;
}
}

dSl=arrSL[ArrayMaximum(arrSL)];

LogSL(“OP_BUY – max”,dSl,arrSL[0],arrSL[1],arrSL[2],arrSL[3]);

if( dSl > OrderStopLoss() || OrderStopLoss() == 0 )
{
OrderModify(OrderTicket(), OrderOpenPrice(),
dSl, OrderTakeProfit(), 0, Yellow);
Log(“Buy – modify”, OrderOpenPrice(), dSl, OrderTakeProfit());
}

// Escape buy
//if( dEscape != 0 && dnBid < OrderOpenPrice() – dEscape – 5 * Point )
if( nUseEscape == 1 && dnBid < OrderOpenPrice() – dEscapeLevel – 5 * Point )
{
OrderModify(OrderTicket(), OrderOpenPrice(),
OrderStopLoss(), OrderOpenPrice() + dEscapeTP, 0, Aqua);
Log(“Buy – EscapeLevel”, OrderOpenPrice(), dSl, OrderTakeProfit());
}

} // end OP_BUY

//////////////////////////////////////////////////////////////////////////////////////////////////

if(OrderType() == OP_SELL)
{
dSl=OrderStopLoss();
if( dSl == 0 )
if( dInitialSL != 0)
dSl = dnBid + dInitialSL;

ArrayResize(arrSL,5);
ArrayInitialize(arrSL,dSl);

LogSL(“OP_SELL-check”,dSl,arrSL[0],arrSL[1],arrSL[2],arrSL[3]);

if( dPropSLRatio > 0 )
{
if( Ask <= (OrderOpenPrice() – dPropSLThreshold) )
{
dSl = NormalizeDouble(OrderOpenPrice() – dPropSLRatio*(OrderOpenPrice() – Ask) + dSpread,4);
if(OrderStopLoss() > dSl)
arrSL[1]=dSl;
}
else
{
if(dTrailingStop != 0)
arrSL[2]=dnBid + dTrailingStop;
}
}

dSl=arrSL[ArrayMinimum(arrSL)];

LogSL(“OP_SELL – min”,dSl,arrSL[0],arrSL[1],arrSL[2],arrSL[3]);

if( dSl < OrderStopLoss() || OrderStopLoss() == 0 )
{
OrderModify(OrderTicket(), OrderOpenPrice(),
dSl, OrderTakeProfit(), 0, Yellow);
Log(“Sell – modify”, OrderOpenPrice(), dSl, OrderTakeProfit());
}

// Escape sell
//if( dEscape != 0 && dnAsk > OrderOpenPrice() + dEscape + 5 * Point )
if( nUseEscape == 1 && dnAsk > OrderOpenPrice() + dEscapeLevel + 5 * Point )
{
OrderModify(OrderTicket(), OrderOpenPrice(),
OrderStopLoss(), OrderOpenPrice() – dEscapeTP, 0, Aqua);

Log(“Buy – EscapeLevel”, OrderOpenPrice(), dSl, OrderTakeProfit());
}

} // End OP_SELL
} //end if(OrderMagicNumber() == nMagic)

} //end for(int nCnt = 0; nCnt < OrdersTotal(); nCnt++)
} // end ModifyOrders()

//////////////////////////////////////////////////////////////////////////////////////////////////

void Log(string msg, double val1, double val2, double val3)
{
if(logging > 0 )
{
int handle;
handle=FileOpen(strExpert+”.log”,FILE_CSV|FILE_READ|FILE_WRITE,’;’);
if(handle<1)
{
//Print(“File “+strExpert+”-log.txt not found, the last error is “, GetLastError());
Print(“File “+strExpert+”-log.txt not found, the last error is “, GetLastError());
return(false);
}

FileSeek(handle, 0, SEEK_END);
//—- add data to the end of file
//FileWrite(handle, Year(), Month(), Day(), Hour(), Minute(), “Bid, Ask “, msg, Bid, Ask, “___”, val1, val2, val3, val4, val5, val6);
FileWrite(handle, Year(), Month(), Day(), Hour(), Minute(), msg, Bid, Ask, “___”, val1, “___”, val2, val3);
FileClose(handle);
}
}

void LogSL(string msg, double val1, double val2, double val3, double val4, double val5)
{
if(logging > 1 )
{
int handle;
handle=FileOpen(strExpert+”-sl_log.txt”,FILE_CSV|FILE_READ|FILE_WRITE,’;’);
if(handle<1)
{
Print(“File “+strExpert+”-sl_log.txt not found, the last error is “, GetLastError());
return(false);
}
FileSeek(handle, 0, SEEK_END);
//—- add data to the end of file
FileWrite(handle, Year(), Month(), Day(), Hour(), Minute(), msg, Bid, Ask, val1, val2, val3, val4, val5);
FileClose(handle);
}
}

 

 

如果你对文件有了解,请帮助投票!

If you are familiar with the file, please help vote!

平均评分 5 / 5. 投票数: 1

到目前为止还没有投票!成为第一位投票人。

相关资源

暂无评论

暂无评论...
Ads Blocker Image Powered by Code Help Pro

检测到广告拦截程序!!!Ads Blocker Detected!!!

我们检测到您正在使用扩展来屏蔽广告。请通过禁用这些广告屏蔽程序或者把网站加入白名单来支持我们。

We have detected that you are using an extension to block advertisements. Please support us by disabling these advertising blocking programs or adding the website to the whitelist.