Orders Execution
Indicators Used
Miscellaneous
0
Views
0
Downloads
0
Favorites
Profitability Reports
GBP/USD
Oct 2024 - Jan 2025
0.00 %
Total Trades
0
Won Trades
0
Lost trades
0
Win Rate
0.0 %
Expected payoff
0.00
Gross Profit
0.00
Gross Loss
0.00
Total Net Profit
0.00
-100%
-50%
0%
50%
100%
SilverTrendTrader_v7
/*-----------------------------+
| |
| Shared by www.Aptrafx.com |
| |
+------------------------------*/
//+------------------------------------------------------------------+
//| SilverTrendTrading v6 |
//+------------------------------------------------------------------+
#include <stdlib.mqh>
#property copyright "fukinagashi"
#property link "http://www.strategybuilderfx.com/forums/showthread.php?t=15429"
#property stacksize 1024
extern int MAPeriod=120;
extern int PrimaryType=1; // 1 = SilverTrend / 2 =
extern int SecondaryType=2; // 0 = nothing / 1 = EMAAngle / 2 = CCIAngle
extern int SignalOfFullCandle=1; // 1 - yes / 0 - no
extern double AngleTreshold=0.3;
extern int TrailingStop =0;
extern int TakeProfit = 10;
extern int InitialStopLoss=25;
extern double Lots = 1;
extern double FridayNightHour=16;
datetime bartime;
double Slippage=3;
int Signal=0, OldSignal=0;
int start()
{
int cnt, ticket, err, result, total, shift;
int has_a_short_trade=0, has_a_long_trade=0;
int MagicNumber;
double ts, tp, Min_OrderPrice;
bool LongSignal, ShortSignal, ExitLong, ExitShort;
double dummy1[], dummy2[], dummy3[], dummy4[];
string setup;
MagicNumber = 3500 + func_Symbol2Val(Symbol())*100 + func_TimeFrame_Const2Val(Period());
setup="STv7_" + Symbol() + "_" + func_TimeFrame_Val2String(func_TimeFrame_Const2Val(Period()));
if (SignalOfFullCandle==1) {
shift=1;
} else {
shift=0;
}
if(PrimaryType==1) {
double Plus=iCustom(NULL, 0, "SilverTrend_Signal", 0, shift);
double Minus=iCustom(NULL, 0, "SilverTrend_Signal", 1, shift);
if (Plus>0) {
Signal=1;
} else if (Minus>0) {
Signal=-1;
} else {
Signal=0;
}
} else if(PrimaryType==2) {
//Signal=AndropovSignal(0, shift);
}
if (SecondaryType==0) {
if (OldSignal!=Signal && Signal>0) {
Print("EnterLong");
LongSignal=true;
ShortSignal=false;
} else if (OldSignal!=Signal && Signal<0) {
Print("EnterShort");
LongSignal=false;
ShortSignal=true;
} else {
LongSignal=false;
ShortSignal=false;
}
OldSignal=Signal;
} else if (SecondaryType==1) { // EMAAngle
double EMA_Angle=EMAAngle(MAPeriod, 0, shift);
if (OldSignal!=Signal && Signal>0 && EMA_Angle>AngleTreshold) {
Print("EnterLong");
LongSignal=true;
ShortSignal=false;
} else if (OldSignal!=Signal && Signal<0 && EMA_Angle<-AngleTreshold) {
Print("EnterShort");
LongSignal=false;
ShortSignal=true;
} else {
LongSignal=false;
ShortSignal=false;
}
OldSignal=Signal;
} else if (SecondaryType==2) { // CCIANgle
double CCI_Angle=CCIAngle(MAPeriod, 0, shift);
if (OldSignal!=Signal && Signal>0 && CCI_Angle>AngleTreshold) {
Print("EnterLong");
LongSignal=true;
ShortSignal=false;
} else if (OldSignal!=Signal && Signal<0 && CCI_Angle<-AngleTreshold){
Print("EnterShort");
LongSignal=false;
ShortSignal=true;
} else {
LongSignal=false;
ShortSignal=false;
}
OldSignal=Signal;
}
if (Signal>0) {
Print("ExitShort");
ExitLong=false;
ExitShort=true;
} else if (Signal<0) {
Print("ExitLong");
ExitLong=true;
ExitShort=false;
} else {
ExitLong=false;
ExitShort=false;
}
Comment(Signal + " " + OldSignal + " " + CCI_Angle);
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////// MODIFICATIONS ON OPEN ORDERS ////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
total = OrdersTotal();
for(cnt=total;cnt>=0;cnt--)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
OrderPrint();
if(OrderType()==OP_BUY && OrderMagicNumber()==MagicNumber) {
Print("Identified");
if(ExitLong) {
Print("Close Long");
OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Violet); // close position
err = GetLastError();
if (err>1) {
Print("Error closing BUY order [" + setup + "]: (" + err + ") " + ErrorDescription(err) + " " + setup);
}
return(0);
} else if(TrailingStop>0) {
if(Bid-OrderOpenPrice()>Point*TrailingStop) {
ts = Bid-Point*TrailingStop;
}
if((OrderStopLoss()<ts) || (OrderStopLoss()==0)) {
result=OrderModify(OrderTicket(),OrderOpenPrice(),ts,OrderTakeProfit(),0,White);
err = GetLastError();
if (err>1) {
Print("Error modifying BUY order [" + setup + "]: (" + err + ") " + ErrorDescription(err) + " " + setup);
}
}
}
} else if (OrderType()==OP_SELL && OrderMagicNumber()==MagicNumber) {
Print("Identified");
if (ExitShort) {
Print("Close Short");
OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Violet); // close position
err = GetLastError();
if (err>1) {
Print("Error closing SELL order [" + setup + "]: (" + err + ") " + ErrorDescription(err) + " " + setup);
}
return(0);
} else if(TrailingStop>0) {
if((OrderOpenPrice()-Ask)>(Point*TrailingStop)) {
ts=Ask+Point*TrailingStop;
}
if((ts!=0) && ((OrderStopLoss()>ts) || (OrderStopLoss()==0))) {
result=OrderModify(OrderTicket(),OrderOpenPrice(),ts,OrderTakeProfit(),0,White);
err = GetLastError();
if (err>1) {
Print("Error modifying Sell order [" + setup + "]: (" + err + ") " + ErrorDescription(err) + " " + setup);
}
}
}
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////// SETTING ORDERS ////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if(AccountFreeMargin()<(1000*Lots)) return(0);
total = OrdersTotal();
if (LongSignal || ShortSignal) {
for(cnt=total;cnt>=0;cnt--)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderMagicNumber()==MagicNumber) {
return(0); // atm only one trade at a time
}
}
if(LongSignal) {
if (FridayNightHour>0 && TimeDayOfWeek(Time[0])==5 && TimeHour(Time[0])>FridayNightHour) {
if (!IsTesting()) Print("Friday: No New Trades: " + TimeToStr(Time[0],TIME_DATE|TIME_MINUTES));
return(0);
}
if(InitialStopLoss>0) { ts = Ask-(InitialStopLoss*Point);
} else { ts = 0; }
if(TakeProfit>0) { tp = Ask+(TakeProfit*Point);
} else { tp = 0;}
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,ts,tp,setup,MagicNumber,0,Green);
if (!IsTesting()) PlaySound("expert.wav");
if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) { OrderPrint(); }
} else {
err = GetLastError();
Print("Error opening BUY order [" + setup + "]: (" + err + ") " + ErrorDescription(err) + " " + setup);
if (!IsTesting()) PlaySound("alert2.wav");
}
}
if(ShortSignal) {
if (FridayNightHour>0 &&TimeDayOfWeek(Time[0])==5 && TimeHour(Time[0])>FridayNightHour) {
if (!IsTesting()) Print("Friday: No New Trades: " + TimeToStr(Time[0],TIME_DATE|TIME_MINUTES));
return(0);
}
if(InitialStopLoss>0) { ts = Bid+(InitialStopLoss*Point);
} else { ts = 0;}
if(TakeProfit>0) { tp = Bid-(TakeProfit*Point);
} else { tp = 0;}
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,ts,tp,setup,MagicNumber,0,Green);
if (!IsTesting()) PlaySound("expert.wav");
if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) { OrderPrint(); }
} else {
err = GetLastError();
Print("Error opening BUY order [" + setup + "]: (" + err + ") " + ErrorDescription(err) + " " + setup);
if (!IsTesting()) PlaySound("alert2.wav");
}
}
}
return(0);
}
int func_TimeFrame_Const2Val(int Constant ) {
switch(Constant) {
case 1: // M1
return(1);
case 5: // M5
return(2);
case 15:
return(3);
case 30:
return(4);
case 60:
return(5);
case 240:
return(6);
case 1440:
return(7);
case 10080:
return(8);
case 43200:
return(9);
}
}
//+------------------------------------------------------------------+
//| Time frame string appropriation function |
//+------------------------------------------------------------------+
string func_TimeFrame_Val2String(int Value ) {
switch(Value) {
case 1: // M1
return("PERIOD_M1");
case 2: // M1
return("PERIOD_M5");
case 3:
return("PERIOD_M15");
case 4:
return("PERIOD_M30");
case 5:
return("PERIOD_H1");
case 6:
return("PERIOD_H4");
case 7:
return("PERIOD_D1");
case 8:
return("PERIOD_W1");
case 9:
return("PERIOD_MN1");
default:
return("undefined " + Value);
}
}
int func_Symbol2Val(string symbol) {
if(symbol=="AUDUSD") { return(01);
} else if(symbol=="CHFJPY") { return(10);
} else if(symbol=="EURAUD") { return(10);
} else if(symbol=="EURCAD") { return(11);
} else if(symbol=="EURCHF") { return(12);
} else if(symbol=="EURGBP") { return(13);
} else if(symbol=="EURJPY") { return(14);
} else if(symbol=="EURUSD") { return(15);
} else if(symbol=="GBPCHF") { return(20);
} else if(symbol=="GBPJPY") { return(21);
} else if(symbol=="GBPUSD") { return(22);
} else if(symbol=="USDCAD") { return(40);
} else if(symbol=="USDCHF") { return(41);
} else if(symbol=="USDJPY") { return(42);
} else if(symbol=="GOLD") { return(90);
} else { Comment("unexpected Symbol"); return(0);
}
}
double EMAAngle(int EMAPeriod, int period, int shift) {
int StartEMAShift=6;
int EndEMAShift=0;
double fEndMA=iMA(NULL,period,EMAPeriod,0,MODE_EMA,PRICE_MEDIAN,shift+EndEMAShift);
double fStartMA=iMA(NULL,period,EMAPeriod,0,MODE_EMA,PRICE_MEDIAN,shift+StartEMAShift);
// 10000.0 : Multiply by 10000 so that the fAngle is not too small
// for the indicator Window.
return(10000.0 * (fEndMA - fStartMA)/(StartEMAShift-EndEMAShift));
}
double CCIAngle(int CCIPeriod, int period, int shift) {
int StartCCIShift=2;
int EndCCIShift=0;
double fEndCCI=iCCI(NULL, period, CCIPeriod, PRICE_MEDIAN, shift+EndCCIShift);
double fStartCCI=iCCI(NULL, period, CCIPeriod, PRICE_MEDIAN, shift+StartCCIShift);
// 10000.0 : Multiply by 10000 so that the fAngle is not too small
// for the indicator Window.
return((fEndCCI - fStartCCI)/(StartCCIShift-EndCCIShift));
}
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
---