Orders Execution
Miscellaneous
0
Views
0
Downloads
0
Favorites
ASC Trend EA(3)
//+------------------------------------------------------------------+
//| Copyright 2006, Larionov P.V. |
//| lolion@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright 2006, ASCTRENDTS "
#property link "lolion@mail.ru"
#define MAGIC 916883
extern double lStopLoss = 100;
extern double sStopLoss = 100;
extern double lTakeProfit = 1000;
extern double sTakeProfit = 1000;
extern double lTrailingStop = 50;
extern double sTrailingStop = 50;
extern int MainTrend = 1440;
extern int ShiftBars = 1;
extern int Risk = 3;
extern bool EnableCloseByASCTrend =true;
extern int Slippage = 5;
extern bool UseHourTrade = false; //use timefilter
extern int FromHourTrade = 8;
extern int ToHourTrade = 18;
extern bool UseSound = false;
extern string NameFileSound = "alert.wav";
extern double Lots = 1.0;
extern string _Parameters_b_Lots = "Settings of the lot size calculation module";
extern int LotsWayChoice = 1; // Lot size selection:
// 0-fixed lot size,
// 1-% from deposit,
// 2-fractional proportional,
// 3-fractional fixed lot size,
extern int LotsPercent=20; // % from deposit
extern int LotsDeltaDepo=500; // factor of deposit increase
extern int LotsDepoForOne=500; // deposit size for 1 mini lot
extern int LotsMax=10000; // Max number of mini lots
extern color clOpenBuy = Blue;
extern color clCloseBuy = Aqua;
extern color clOpenSell = Red;
extern color clCloseSell = Violet;
extern color clModiBuy = Blue;
extern color clModiSell = Red;
extern string Name_Expert = "ASCTRENDTS";
void deinit(){
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
bool PS=false, PB=false;
int start(){//1
for(int i=ShiftBars;i<Bars; i++){//2
PS = AscTrendSignal(MainTrend,"DOWN",i,Risk);
PB = AscTrendSignal(MainTrend,"UP",i,Risk);
if(PS||PB){//3
break;
}//3
}//2
if (UseHourTrade){//2
if (!(Hour()>=FromHourTrade && Hour()<=ToHourTrade)){//3
Comment("Non-Trading Hours");
return(0);
}//3
}//2
if(Bars<100){//2
Print("bars less than 100");
return(0);
}//2
if(lStopLoss<10){//2
Print("StopLoss less than 10");
return(0);
}//2
if(lTakeProfit<10){
Print("TakeProfit less than 10");
return(0);
}//2
if(sStopLoss<10){
Print("StopLoss less than 10");
return(0);
}//2
if(sTakeProfit<10){//2
Print("TakeProfit less than 10");
return(0);
}//2
if(AccountFreeMargin()<(500*Lots)){//2
Print("You are out of Money", AccountFreeMargin());
return(0);
}//2
if (!ExistPositions()){//2
if (PS){//3
OpenSell();
return(0);
}//3
if (PB){//3
OpenBuy();
return(0);
}//3
}//2
if (ExistPositions()){//2
if(OrderType()==OP_BUY){//3
if(EnableCloseByASCTrend){//4
if (PS){//5
CloseBuy();
return(0);
}//5
}//4
}//3
if(OrderType()==OP_SELL){//3
if(EnableCloseByASCTrend){//4
if (PB){//5
CloseSell();
return(0);
}//5
}//4
}//3
if(lTrailingStop>0||sTrailingStop>0){//3
TrailingPositionsBuy(lTrailingStop);
TrailingPositionsSell(sTrailingStop);
}//3
return (0);
}//2
}//1
bool ExistPositions() {
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) {
return(True);
}
}
}
return(false);
}
void TrailingPositionsBuy(int trailingStop) {
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 (Bid-OrderOpenPrice()>trailingStop*Point) {
if (OrderStopLoss()<Bid-trailingStop*Point)
ModifyStopLoss(Bid-trailingStop*Point);
}
}
}
}
}
}
void TrailingPositionsSell(int trailingStop) {
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) {
if (OrderType()==OP_SELL) {
if (OrderOpenPrice()-Ask>trailingStop*Point) {
if (OrderStopLoss()>Ask+trailingStop*Point || OrderStopLoss()==0)
ModifyStopLoss(Ask+trailingStop*Point);
}
}
}
}
}
}
void ModifyStopLoss(double ldStopLoss) {
bool fm;
fm = OrderModify(OrderTicket(),OrderOpenPrice(),ldStopLoss,OrderTakeProfit(),0,CLR_NONE);
if (fm && UseSound) PlaySound(NameFileSound);
}
void CloseBuy() {
bool fc;
fc=OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, clCloseBuy);
if (fc && UseSound) PlaySound(NameFileSound);
}
void CloseSell() {
bool fc;
fc=OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, clCloseSell);
if (fc && UseSound) PlaySound(NameFileSound);
}
void OpenBuy() {
double ldLot, ldStop, ldTake;
string lsComm;
ldLot = GetSizeLot();
ldStop = GetStopLossBuy();
ldTake = GetTakeProfitBuy();
lsComm = GetCommentForOrder();
OrderSend(Symbol(),OP_BUY,ldLot,Ask,Slippage,ldStop,ldTake,lsComm,MAGIC,0,clOpenBuy);
if (UseSound) PlaySound(NameFileSound);
}
void OpenSell() {
Print("OpenSell");
double ldLot, ldStop, ldTake;
string lsComm;
ldLot = GetSizeLot();
ldStop = GetStopLossSell();
ldTake = GetTakeProfitSell();
lsComm = GetCommentForOrder();
OrderSend(Symbol(),OP_SELL,ldLot,Bid,Slippage,ldStop,ldTake,lsComm,MAGIC,0,clOpenSell);
Print("OrderSent !!!!!!!!");
if (UseSound) PlaySound(NameFileSound);
}
string GetCommentForOrder(){
return(Name_Expert);
}
double GetSizeLot() {
double dLot;
if (LotsWayChoice==0) dLot=Lots;
// fixed % from deposit
if (LotsWayChoice==1) {
dLot=MathCeil(AccountFreeMargin()/10000*LotsPercent)/10;
}
// fractional proportional
if (LotsWayChoice==2) {
int k=LotsDepoForOne;
for (double i=2; i<=LotsMax; i++) {
k=k+i*LotsDeltaDepo;
if (k>AccountFreeMargin()) {
dLot=(i-1)/10; break;
}
}
}
// fractional fixed
if (LotsWayChoice==3) {
dLot=MathCeil((AccountFreeMargin()-LotsDepoForOne)/LotsDeltaDepo)/10;
}
if (dLot<0.1) dLot=0.1;
if (dLot>LotsMax) dLot=LotsMax;
return(dLot);
}
double GetStopLossBuy() { return (Bid-lStopLoss*Point);}
double GetStopLossSell() { return(Ask+sStopLoss*Point); }
double GetTakeProfitBuy() { return(Ask+lTakeProfit*Point); }
double GetTakeProfitSell() { return(Bid-sTakeProfit*Point); }
//******************************************************************************************************
//bool AscTrendSignal(int TF, string Direction, int Shift=0 int Risk=3)
//Description: Determine of the moment of the signal receiving from the AscTrendSignal indicator.
//Settings: int TF - Timeframe,string Direction - Direction to enter. int Shift - which bar to look at, int Risk - settings of the indicator
//Returned value - True if the signal received, false if else.
//******************************************************************************************************
// !!!Please note: the custom indicator should be named as "ASCTrend"
// for the normal working function
bool AscTrendSignal(int TF=0, string Direction="", int Shift=1, int Risk=3){//1
double ASCval1, ASCval2;
ASCval1 = iCustom(NULL,NULL,"ASCTrend",Risk,300,0,Shift);
ASCval2 = iCustom(NULL,NULL,"ASCTrend",Risk,300,1,Shift);
//Print("ASC1 ",ASCval1," ASC2 ",ASCval2);
if (Direction == "UP"){//2
if(ASCval2>0){//3
return(true);
}//3
}//2
if (Direction == "DOWN"){//2
if(ASCval1>0){//3
Print(Direction);
return(true);
}//3
}//2
}//1
Comments
Markdown Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---