Price Data Components
Orders Execution
Indicators Used
Miscellaneous
0
Views
0
Downloads
0
Favorites
Profitability Reports
AUD/USD
Oct 2024 - Jan 2025
63.00 %
Total Trades
7
Won Trades
0
Lost trades
0
Win Rate
0.00 %
Expected payoff
-1.64
Gross Profit
20.00
Gross Loss
-31.50
Total Net Profit
-11.50
-100%
-50%
0%
50%
100%
GBP/USD
Oct 2024 - Jan 2025
25.00 %
Total Trades
118
Won Trades
55
Lost trades
63
Win Rate
0.47 %
Expected payoff
-4.36
Gross Profit
172.00
Gross Loss
-686.00
Total Net Profit
-514.00
-100%
-50%
0%
50%
100%
starter_v8
//+------------------------------------------------------------------+
//| starter_v8.mq4 |
//| Copyright © 2005 |
//| Thanks to Starter, Maloma, Amir, Fukinagashi, Forex_trader, |
//| kmrunner, and all other strategybuilderFx members that |
//| contributed to the success of this expert. |
//| From MrPip |
//| My contibution is clean up of code |
//| 10/13/05 added EMAAngleZero |
//| added Maloma logic for No buy when Sell open, etc |
//| removed Stop logic code uses TakeProfit instead |
//| 10/15 Corrected EMAAngleZero for handling USDJPY |
//| 10/18/05 Added Slippage as parameter to expert |
//| 10/18/05 Added code for multiple tries to open trade |
//| 10/19/05 Modified code to determine number of trades |
//| Possible bug from TradesInThisSymbol |
//| Only allows 1 trade per symbol |
//| Changed variable names |
//| est_b and est_s to OK2Buy and OK2Sell |
//| Remove CheckBuySellPosition now done with |
//| CheckOpenPositions |
//| Removed MaximumLosses logic |
//} 10/19/05 Removed references to Globals and passed as params |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, Strategybuilderfx members"
#property link "http:/strategybuilderfx.com/"
#include <stdlib.mqh>
extern int Debug = 0; // Change to 1 to allow print
//+---------------------------------------------------+
//|Account functions |
//+---------------------------------------------------+
extern int AccountIsMini = 0; // Change to 1 if trading mini account
extern int LiveTrading = 0; // Change to 1 if trading live.
//+---------------------------------------------------+
//|Money Management |
//+---------------------------------------------------+
extern int mm = 1; // Change to 0 if you want to shutdown money management controls. Lots = 1 will be in effect and only 1 lot will be open regardless of equity.
extern double Riskpercent = 5; // Change to whatever percent of equity you wish to risk.
extern double DecreaseFactor = 3; // Used to decrease lot size after a loss is experienced to protect equity. Recommended not to change.
extern double StopLoss = 35; // Maximum pips willing to lose per position.
extern double TrailingStop = 0; // Change to whatever number of pips you wish to trail your position with.
extern double Margincutoff = 800; // Expert will stop trading if equity level decreases to that level.
extern double Maxtrades = 10; // Total number of positions on all currency pairs. You can change this number as you wish.
//+---------------------------------------------------+
//|Profit controls |
//+---------------------------------------------------+
extern int TakeProfit = 10; // Maximum profit level achieved.
extern int Slippage = 10; // Possible fix for not getting filled or closed
//+---------------------------------------------------+
//|Indicator Variables |
//| Change these to try your own system |
//| or add more if you like |
//+---------------------------------------------------+
extern int EMAPeriod=34; //EMAAnglePeriod
extern double AngleTreshold=0.2;
extern int StartEMAShift=6; // Check last six bars
extern int EndEMAShift=0;
extern double MAPeriod=120; // Moving average period.
extern double MAPeriod2=40; // Moving average period 2.
extern double Lots = 1; // standard lot size.
extern int Turnon = 1; // Turns expert on, change to 0 and no trades will take place even if expert is enabled.
//+---------------------------------------------------+
//|General controls |
//+---------------------------------------------------+
string OrderText = "";
double lotMM;
int TradesInThisSymbol;
int cnt=0, total;
datetime LastTime;
double Sl;
double Tr;
int ticket;
bool OK2Buy, OK2Sell; // determines if buy or sell trades are allowed
int NumBuys, NumSells; // Number of buy and sell trades in this symbol
//+---------------------------------------------------+
//| Indicator values for entry or exit conditions |
//| Add or Change to test your system |
//+---------------------------------------------------+
double Laguerre;
double Laguerreprevious;
double Alpha;
double MA, MAprevious;
double MA2,MAprevious2;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| The functions from this point to the start function are where |
//| changes are made to test other systems or strategies. |
//|+-----------------------------------------------------------------+
//********************************************************************
//********************************************************************
//+------------------------------------------------------------------+
//| EMAAngleZero |
//| jpkfox |
//| |
//| You can use this indicator to measure when the EMA angle is |
//| "near zero". AngleTreshold determines when the angle for the |
//| EMA is "about zero": This is when the value is between |
//| [-AngleTreshold, AngleTreshold] (or when the histogram is red). |
//| EMAPeriod: EMA period |
//| AngleTreshold: The angle value is "about zero" when it is |
//| between the values [-AngleTreshold, AngleTreshold]. |
//| StartEMAShift: The starting point to calculate the |
//| angle. This is a shift value to the left from the |
//| observation point. Should be StartEMAShift > EndEMAShift. |
//| StartEMAShift: The ending point to calculate the |
//| angle. This is a shift value to the left from the |
//| observation point. Should be StartEMAShift > EndEMAShift. |
//| |
//| Modified by MrPip |
//| Red for down |
//| Yellow for near zero |
//| Green for up |
//| |
//| New mods for expert |
//| returns -1 for downtrend |
//| returns 1 for uptrend |
//| returns 0 for do not trade |
//| Modified to match code in indicator |
//+------------------------------------------------------------------+
int EMAAngleZeroCheck()
{
double fEndMA, fStartMA;
double fAngle;
double mFactor;
int ShiftDif;
if(EndEMAShift >= StartEMAShift)
{
if (Debug == 1) Print("Error: EndEMAShift >= StartEMAShift");
StartEMAShift = 6;
EndEMAShift = 0;
}
ShiftDif = StartEMAShift-EndEMAShift;
mFactor = 10000.0;
if (Symbol() == "USDJPY") mFactor = 100.0;
mFactor /= ShiftDif;
fEndMA=iMA(NULL,0,EMAPeriod,0,MODE_EMA,PRICE_MEDIAN,EndEMAShift);
fStartMA=iMA(NULL,0,EMAPeriod,0,MODE_EMA,PRICE_MEDIAN,StartEMAShift);
// 10000.0 : Multiply by 10000 so that the fAngle is not too small
// for the indicator Window.
fAngle = mFactor * (fEndMA - fStartMA);
// fAngle = MathArctan(fAngle)/0.01745;
if(fAngle > AngleTreshold) return(1);
if (fAngle < -AngleTreshold) return (-1);
return(0);
}
//+------------------------------------------------------------------+
//| LaGuerre function calculation |
//+------------------------------------------------------------------+
double LaGuerre(double gamma, int shift)
{
double RSI;
double L0[100];
double L1[100];
double L2[100];
double L3[100];
double CU, CD;
for (int i=shift+99; i>=shift; i--)
{
L0[i] = (1.0 - gamma)*Close[i] + gamma*L0[i+1];
L1[i] = -gamma*L0[i] + L0[i+1] + gamma*L1[i+1];
L2[i] = -gamma*L1[i] + L1[i+1] + gamma*L2[i+1];
L3[i] = -gamma*L2[i] + L2[i+1] + gamma*L3[i+1];
CU = 0;
CD = 0;
if (L0[i] >= L1[i]) CU = L0[i] - L1[i];
else CD = L1[i] - L0[i];
if (L1[i] >= L2[i]) CU = CU + L1[i] - L2[i];
else CD = CD + L2[i] - L1[i];
if (L2[i] >= L3[i]) CU = CU + L2[i] - L3[i];
else CD = CD + L3[i] - L2[i];
if (CU + CD != 0) RSI = CU / (CU + CD);
}
return(RSI);
}
//+------------------------------------------+
//| CheckExitCondition |
//| |
//| Check if Leguerre has proper value |
//| return 0 for exit condition not met |
//| return 1 for exit condition met |
//+------------------------------------------+
int CheckExitCondition(string type, double Laguerre1)
{
if (type == "BUY")
{
if (Laguerre1 > 0.9)
{
if (Debug == 1) Print ("Exit Condition met for Buy");
return (1);
}
return (0);
}
if (type == "SELL")
{
if (Laguerre1 < 0.1)
{
if (Debug == 1) Print ("Exit Condition met for Sell");
return (1);
}
}
return (0);
}
//+------------------------------------------+
//| CheckBuyCondition |
//| |
//| return 0 for exit condition not met |
//| return 1 for exit condition met |
//+------------------------------------------+
int CheckBuyCondition(double LagPrev, double Lag, double Ma, double MaPrev, double Ma2, double MaPrev2,double Alp)
{
if((LagPrev<=0) && (Lag<=0) && (Ma>MaPrev) && (Ma2>MaPrev2)&& (Alp<-5))
{
if (Debug == 1) Print ("Buy Condition met");
return(1);
}
return (0);
}
//+------------------------------------------+
//| CheckSellCondition |
//| |
//| return 0 for exit condiotion not met |
//| return 1 for exit condition met |
//+------------------------------------------+
int CheckSellCondition(double LagPrev, double Lag, double Ma, double MaPrev,double Ma2, double MaPrev2, double Alp)
{
if((LagPrev>=1) && (Lag>=1) && (Ma<MaPrev) && (Ma2<MaPrev2) && (Alp>5))
{
if (Debug == 1) Print ("Sell Condition met");
return(1);
}
return (0);
}
//+--------------------------------------------------------+
//| TryClosePositions module cut from CheckOpenPositions |
//+--------------------------------------------------------+
int TryClosePositions(string type,int exitall, double Lag)
{
int ExitCondition;
if (type == "BUY")
{
// First check if indicators cause exit
ExitCondition = CheckExitCondition("BUY", Lag);
// Then check if Friday
if(exitall==1) ExitCondition = 1;
HandleBuys(ExitCondition);
}
if (type == "SELL")
{
// First check if indicators cause exit
ExitCondition = CheckExitCondition("SELL",Lag);
// Then check if Friday
if(exitall==1) ExitCondition = 1;
HandleSells(ExitCondition);
}
return (0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
int donttrade, allexit;
int ExitCondition, EMAAngle;
int MagicNumber = 3000 + func_Symbol2Val(Symbol())*100 + func_TimeFrame_Const2Val(Period());
string setup="sv8" + Symbol() + "_" + func_TimeFrame_Val2String(func_TimeFrame_Const2Val(Period()));
//+------------------------------------------------------------------+
//| Condition statements |
//| Change or add for your strategy |
//+------------------------------------------------------------------+
Laguerre=LaGuerre(0.7, 0);
Laguerreprevious=LaGuerre(0.7, 1);
Alpha=iCCI(NULL, 0, 14, PRICE_CLOSE, 0);
MA=iMA(NULL,0,MAPeriod,0,MODE_EMA,PRICE_MEDIAN,0);
MAprevious=iMA(NULL,0,MAPeriod,0,MODE_EMA,PRICE_MEDIAN,1);
MA2=iMA(NULL,0,MAPeriod2,0,MODE_EMA,PRICE_MEDIAN,0);
MAprevious2=iMA(NULL,0,MAPeriod2,0,MODE_EMA,PRICE_MEDIAN,1);
donttrade = 0;
allexit = 0;
//+------------------------------------------------------------------+
//| Friday Exits |
//+------------------------------------------------------------------+
if(DayOfWeek()==5 && Hour()>=18) donttrade=1;
if(DayOfWeek()==5 && Hour()>=20) allexit=1;
//+------------------------------------------------------------------+
//| Open Position Controls |
//+------------------------------------------------------------------+
NumBuys = CheckOpenBuyPositions(MagicNumber);
if (NumBuys > 0) TryClosePositions("BUY",allexit, Laguerre);
NumSells = CheckOpenSellPositions(MagicNumber);
if (NumSells > 0) TryClosePositions("SELL",allexit,Laguerre);
// Check if any open positions were closed
TradesInThisSymbol = CheckOpenPositions(MagicNumber);
//+------------------------------------------------------------------+
//| New Position Controls |
//+------------------------------------------------------------------+
if(AccountFreeMargin() < Margincutoff) {
return(0);}
// Only allow 1 trade per Symbol
if(TradesInThisSymbol > 0) {
return(0);}
if(CurTime() < LastTime) {
return(0);}
// Moved after open positions are closed for more available margin
if(mm == 1)
{
lotMM = LotsOptimized(MagicNumber);
}
else {
lotMM = Lots; // Change mm to 0 if you want the Lots parameter to be in effect
}
OrderText = ""; //Must be blank before going into the main section
// Check for good angle on EMA
EMAAngle = EMAAngleZeroCheck();
if (EMAAngle == 1) // uptrend
{
OK2Buy = true;
OK2Sell = false;
}
if (EMAAngle == -1) // downtrend
{
OK2Buy = false;
OK2Sell = true;
}
if (EMAAngle == 0) // market is flat
{
OK2Buy = false;
OK2Sell = false;
}
Laguerre=LaGuerre(0.7, 0);
Laguerreprevious=LaGuerre(0.7, 1);
Alpha=iCCI(NULL, 0, 14, PRICE_CLOSE, 0);
MA=iMA(NULL,0,MAPeriod,0,MODE_EMA,PRICE_MEDIAN,0);
MAprevious=iMA(NULL,0,MAPeriod,0,MODE_EMA,PRICE_MEDIAN,1);
MA2=iMA(NULL,0,MAPeriod2,0,MODE_EMA,PRICE_MEDIAN,0);
MAprevious2=iMA(NULL,0,MAPeriod2,0,MODE_EMA,PRICE_MEDIAN,1);
if((CheckBuyCondition(Laguerreprevious, Laguerre, MA, MAprevious, MA2, MAprevious2, Alpha) == 1) && (Turnon == 1) && (donttrade == 0) && OK2Buy)
{
OrderText = "BUY";
if (StopLoss>0) {
Sl = Ask-StopLoss*Point;
} else {
Sl=0;
}
if (TakeProfit == 0)
Tr = 0;
else
Tr = Ask+TakeProfit*Point;
}
if((CheckSellCondition(Laguerreprevious, Laguerre, MA, MAprevious, MA2, MAprevious2, Alpha) == 1) && (Turnon == 1) && (donttrade == 0) && OK2Sell)
{
OrderText = "SELL";
if (StopLoss>0) {
Sl = Bid+StopLoss*Point;
} else {
Sl = 0;
}
if (TakeProfit == 0)
Tr = 0;
else
Tr = Bid-TakeProfit*Point;
}
if(OrderText != "" && TradesInThisSymbol == 0)
{
LastTime = DoTrades(OrderText,setup,MagicNumber, lotMM,Sl,Tr,CurTime());
return(0);
}
//----
return(0);
}
//+--------------------------------------------------------+
//| HandleBuys uses exit condition to determine close |
//+--------------------------------------------------------+
int HandleBuys(int ExitConditions)
{
if (ExitConditions == 1)
{
OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Violet); // close position
return(0); // exit
}
if(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>Point*TrailingStop)
{
if(OrderStopLoss()<Bid-Point*TrailingStop)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Aqua);
return(0);
}
}
}
}
//+--------------------------------------------------------+
//| HandleSells uses exit condition to determine close |
//+--------------------------------------------------------+
int HandleSells(int ExitConditions)
{
if (ExitConditions == 1)
{
OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Violet); // close position
return(0); // exit
}
if(TrailingStop>0)
{
if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
{
if(OrderStopLoss()==0.0 || OrderStopLoss()>(Ask+Point*TrailingStop))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Aqua);
return(0);
}
}
}
}
//+-------------------------------------------+
//| DoTrades module cut from start |
//| No real changes |
//+-------------------------------------------+
datetime DoTrades(string OrdText, string SetupStr,int MagicNum,double lotM, double SSl, double TTr, datetime LstTime)
{
double Min_OrderPrice;
int err, tries;
int ticket;
datetime lsttim;
lsttim = LstTime;
if(OrdText == "BUY")
{
Min_OrderPrice=MinOrderPrice(OP_BUY, MagicNum);
if (Min_OrderPrice>0 && Min_OrderPrice<=Ask*1.05) {
Print("Buy too expensive => MinOrderPrice= " + Min_OrderPrice + " Ask=" + Ask);
} else {
// Try to get filled 3 times if error
tries = 0;
while (tries < 3)
{
ticket = OrderSend(Symbol(),OP_BUY,lotM,Ask,Slippage,SSl,TTr,SetupStr,MagicNum,0,Green);
if (Debug == 1) Print ("Buy at ",TimeToStr(CurTime())," for ",Ask);
lsttim += 12;
if(ticket<=0) {
tries++;
} else tries = 3;
}
if(ticket<=0) {
err = GetLastError();
Alert("Error opening BUY order [" + SetupStr + "]: (" + err + ") " + ErrorDescription(err));
}
return(lsttim);
}
}
else if(OrderText == "SELL")
{
Min_OrderPrice=MinOrderPrice(OP_SELL, MagicNum);
if (Min_OrderPrice>0 && Min_OrderPrice<=Bid) {
Print("Buy too expensive MinOrderPrice= " + Min_OrderPrice + " Bid=" + Bid);
} else {
tries = 0;
while (tries < 3)
{
ticket = OrderSend(Symbol(),OP_SELL,lotM,Bid,Slippage,SSl,TTr,SetupStr,MagicNum,0,Red);
if (Debug == 1) Print ("Sell at ",TimeToStr(CurTime())," for ",Bid);
lsttim += 12;
if (ticket <= 0) {
tries++;
} else tries = 3;
}
if(ticket<=0) {
err = GetLastError();
Alert("Error opening Sell order [" + SetupStr + "]: (" + err + ") " + ErrorDescription(err));
}
return(lsttim);
}
}
return(lsttim);
}
//+------------------------------------------------------------------+
//| Check Open Position Controls |
//| Modifies globals NumBuyTrades and NumSellTrades |
//+------------------------------------------------------------------+
int CheckOpenPositions(int MagicNumbers)
{
int cnt, total, NumPositions;
int NumBuyTrades, NumSellTrades; // Number of buy and sell trades in this symbol
total=OrdersTotal();
NumBuyTrades = 0;
NumSellTrades = 0;
for(cnt=0;cnt<total;cnt++)
{
if ( OrderSelect (cnt, SELECT_BY_POS) == false ) continue;
if ( OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumbers) continue;
if((OrderType() == OP_BUY || OrderType() == OP_BUYSTOP) && (OrderSymbol()==Symbol()))
{
NumBuyTrades++;
}
if((OrderType() == OP_SELL || OrderType() == OP_SELLSTOP) && (OrderSymbol()==Symbol()))
{
NumSellTrades++;
}
}
NumPositions = NumBuyTrades + NumSellTrades;
return (NumPositions);
}
int CheckOpenBuyPositions(int MagicNumbers)
{
int cnt, total, NumPositions;
int NumBuyTrades; // Number of buy trades in this symbol
total=OrdersTotal();
NumBuyTrades = 0;
for(cnt=0;cnt<total;cnt++)
{
if ( OrderSelect (cnt, SELECT_BY_POS) == false ) continue;
if ( OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumbers) continue;
if((OrderType() == OP_BUY || OrderType() == OP_BUYSTOP) && (OrderSymbol()==Symbol()))
{
NumBuyTrades++;
}
}
return (NumBuyTrades);
}
int CheckOpenSellPositions(int MagicNumbers)
{
int cnt, total, NumPositions;
int NumSellTrades; // Number of sell trades in this symbol
total=OrdersTotal();
NumSellTrades = 0;
for(cnt=0;cnt<total;cnt++)
{
if ( OrderSelect (cnt, SELECT_BY_POS) == false ) continue;
if ( OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumbers) continue;
if((OrderType() == OP_SELL || OrderType() == OP_SELLSTOP) && (OrderSymbol()==Symbol()))
{
NumSellTrades++;
}
}
return (NumSellTrades);
}
//+------------------------------------------------------------------+
//| Calculate optimal lot size |
//+------------------------------------------------------------------+
double LotsOptimized(int Mnr)
{
double lot=Lots;
int orders=HistoryTotal(); // history orders total
int losses=0; // number of losses orders without a break
int tolosses=0;
//---- select lot size
lot=NormalizeDouble(MathFloor(AccountBalance()*Riskpercent/10000)/10,1);
//---- calcuulate number of losses orders without a break
if(DecreaseFactor>0)
{
for(int i=orders-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Error in history!"); break; }
if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL || OrderMagicNumber()!=Mnr) continue;
//----
if(OrderProfit()>0) break;
if(OrderProfit()<0) losses++;
}
for(i=orders-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Error in history!"); break; }
if(TimeDay(OrderCloseTime()) != TimeDay(CurTime())) continue;
//----
if(OrderProfit()<0) tolosses++;
}
if(losses>1) lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1);
}
if(lot > 1)
lot = MathFloor(lot);
if(AccountIsMini==1)
lot = lot * 10;
//---- return lot size
if(lot<0.1) lot=0.1;
if(LiveTrading == 1)
{
if (AccountIsMini == 0 && lot < 1.0)
lot = 1.0;
}
if(lot > 100)
lot = 100;
return(lot);
}
//+------------------------------------------------------------------+
//| Time frame interval appropriation function |
//+------------------------------------------------------------------+
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=="USDCHF") {
return(1);
} else if(symbol=="GBPUSD") {
return(2);
} else if(symbol=="EURUSD") {
return(3);
} else if(symbol=="USDJPY") {
return(4);
} else if(symbol=="EURGBP") {
return(5);
} else if(symbol=="EURJPY") {
return(6);
} else {
Comment("unexpected Symbol");
}
}
//+------------------------------------------------------------------+
//| Average price efficiency function |
//+------------------------------------------------------------------+
double MinOrderPrice(int OType, int OMagicNumber) {
double MinPrice;
if (OrderType()==OP_BUY) {
MinPrice=1000000;
} else {
MinPrice=0;
}
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()==OType && OrderSymbol()==Symbol() && OrderMagicNumber()==OMagicNumber) {
if (OrderType()==OP_BUY) {
if (OrderOpenPrice()<MinPrice) {
MinPrice=OrderOpenPrice();
}
} else {
if (OrderOpenPrice()>MinPrice) {
MinPrice=OrderOpenPrice();
}
}
}
}
if (MinPrice==1000000) MinPrice=0;
return(MinPrice);
}
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
---