The attached is a bad strategy for testing only (don’t actually trade it). On axitrader it won’t open during live trading but it will open during demo trading and in the strategy tester (yes, I have a smiley face, enabled auto trading, etc.) It was generated with fxpro quant. I tested it on the M1 chart and it opens on a new bar on a demo account. But on a live account it doesn’t open. Any thoughts?
//+------------------------------------------------------------------+
//+ Code generated using FxPro Quant 2.1.4 |
//+------------------------------------------------------------------+
#property strict
#define __STRATEGY_MAGIC 1001000000
#define __SLEEP_AFTER_EXECUTION_FAIL 400
//Input variables
input int _TP_Pips = 300; // TP Pips
input int _Trailing_Stop_Points = 9999; // Trailing Stop Points
input double _Max_Spread = 20; // Max Spread
input int _Min_Adjust_Points = 9999; // Min Adjust Points
input int _Max_Open_Trades = 0; // Max Open Trades
input double _LotsPer1000 = 0.01; // LotsPer1000
input int _SL_Pips_Below_Bar_1_low = 0; // SL Pips Below Bar 1 low
//Global declaration
int init() {
return(0);
}
int start() {
//Local declaration
bool _Simple_Trailing_Stop = false;
bool _Buy = false;
_Simple_Trailing_Stop = Simple_Trailing_Stop(0, 0, _Trailing_Stop_Points, _Min_Adjust_Points);
if( ((Volume[0] == 1) &&
((Ask -
(Bid)) <= Transform(_Max_Spread, 2))) ) _Buy = Buy(0, ((AccountFreeMargin() /
(1000)) *
(_LotsPer1000)), 2, (iLow(Symbol(), 0, 1) -
(Transform(_SL_Pips_Below_Bar_1_low, 3))), 1, _TP_Pips, 5, _Max_Open_Trades, 0, "");
return(0);
}
bool Simple_Trailing_Stop(int MagicIndex, int WaitForProfit, int TrailingStopPoints, int MinAdjustmentPoints)
{
double pnlPoints=0;
double price, sl, tp;
double point = MarketInfo(Symbol(),MODE_POINT);
int stopLevel = int(MarketInfo(Symbol(),MODE_STOPLEVEL) + MarketInfo(Symbol(),MODE_SPREAD));
int cmd;
bool result = true;
double newSl;
int total = OrdersTotal();
for(int i=total-1;i>=0;i--){
if (!OrderSelect(i, SELECT_BY_POS)) continue;
if(OrderMagicNumber() != __STRATEGY_MAGIC + MagicIndex || OrderSymbol() != Symbol()) continue;
cmd = OrderType();
sl = NormalizeDouble(OrderStopLoss(),Digits);
tp = OrderTakeProfit();
if (OrderType() == OP_BUY)
{
price = MarketInfo(Symbol(),MODE_BID);
newSl = NormalizeDouble(price - TrailingStopPoints * point, Digits);
if(((tp - price)/point) < stopLevel && tp != 0) continue;
if(((price - newSl)/point) < stopLevel)continue;
if(WaitForProfit == 0)
{
pnlPoints = (price - OrderOpenPrice())/point;
if (pnlPoints < TrailingStopPoints ) continue;
}
if (sl + MinAdjustmentPoints*point>= newSl) continue;
if(!OrderModify(OrderTicket(), OrderOpenPrice(), newSl, tp, 0))
{
printf("Error: Failed to modify trade. Ticket #%i, error code: %i", OrderTicket(), GetLastError());
result = false;
Sleep(__SLEEP_AFTER_EXECUTION_FAIL);
}
}
else if (OrderType() == OP_SELL)
{
price = MarketInfo(Symbol(),MODE_ASK);
newSl = NormalizeDouble(price+ TrailingStopPoints * point, Digits);
if(((price - tp)/point) < stopLevel) continue;
if(((newSl - price)/point) < stopLevel) continue;
if(WaitForProfit == 0)
{
pnlPoints = (OrderOpenPrice() - price)/point;
if (pnlPoints < TrailingStopPoints) continue;
}
if (sl - MinAdjustmentPoints*point <= newSl && sl != 0) continue;
if(!OrderModify(OrderTicket(), OrderOpenPrice(), newSl, tp, 0))
{
printf("Error: Failed to modify trade. Ticket #%i, error code: %i", OrderTicket(), GetLastError());
result = false;
Sleep(__SLEEP_AFTER_EXECUTION_FAIL);
}
}
}
return(result);
}
bool Buy(int MagicIndex, double Lots, int StopLossMethod, double StopLossPoints, int TakeProfitMethod, double TakeProfitPoints, int Slippage, int MaxOpenTrades,
int MaxFrequencyMins, string TradeComment)
{
static double pipSize = 0;
if(pipSize == 0) pipSize = Point * (1 + 9 * (Digits == 3 || Digits == 5));
double sl = 0, tp = 0;
double stopLossPoints = 0, takeProfitPoints = 0;
int numberOfOpenTrades = 0;
for(int i=OrdersTotal()-1;i>=0;i--){
if(!OrderSelect(i, SELECT_BY_POS)) continue;
if(OrderMagicNumber() != __STRATEGY_MAGIC + MagicIndex || OrderSymbol() != Symbol()) continue;
numberOfOpenTrades ++;
}
if(MaxOpenTrades > 0 && numberOfOpenTrades >= MaxOpenTrades) return(false);
if(MaxFrequencyMins > 0)
{
int recentSeconds = MaxFrequencyMins * 60;
for(int i=OrdersTotal()-1;i>=0;i--){
if(!OrderSelect(i, SELECT_BY_POS)) continue;
if(OrderMagicNumber() != __STRATEGY_MAGIC + MagicIndex || OrderSymbol() != Symbol()) continue;
if(TimeCurrent() - OrderOpenTime() < recentSeconds) return(false);
}
int hstTotal=OrdersHistoryTotal();
for(int i=hstTotal-1;i>=0;i--)
{
if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue;
if(OrderMagicNumber() != __STRATEGY_MAGIC + MagicIndex || OrderSymbol() != Symbol()) continue;
if(TimeCurrent() - OrderOpenTime() < recentSeconds) return(false);
break;
}
}
if(Lots < MarketInfo(Symbol(),MODE_MINLOT)) return(false);
if(AccountFreeMarginCheck(Symbol(), OP_SELL,Lots) <= 0) {
Print("Buy error: insufficient capital");
return(false);
}
if (StopLossPoints > 0)
{
if(StopLossMethod == 0)
{
sl = NormalizeDouble(Ask - StopLossPoints * Point, Digits);
stopLossPoints = StopLossPoints;
}
else if (StopLossMethod == 1)
{
sl = NormalizeDouble(Ask - StopLossPoints * pipSize, Digits);
stopLossPoints = StopLossPoints * (1 + 9 * (Digits == 3 || Digits == 5));
}
else
{
sl = StopLossPoints;
stopLossPoints = (Ask - sl)/Point;
}
}
if (TakeProfitPoints > 0)
{
if(TakeProfitMethod == 0)
{
tp = NormalizeDouble(Ask + TakeProfitPoints * Point, Digits);
takeProfitPoints = TakeProfitPoints;
}
else if (TakeProfitMethod == 1)
{
tp = NormalizeDouble(Ask + TakeProfitPoints * pipSize, Digits);
takeProfitPoints = TakeProfitPoints * (1 + 9 * (Digits == 3 || Digits == 5));
}
else
{
tp = TakeProfitPoints;
takeProfitPoints = (tp - Ask)/Point;
}
}
double stopLevel = MarketInfo(Symbol(),MODE_STOPLEVEL) + MarketInfo(Symbol(),MODE_SPREAD);
if( (sl > 0 && stopLossPoints <= stopLevel) || (tp > 0 && takeProfitPoints <= stopLevel) )
{
Print("Cannot Buy: Stop loss and take profit must be at least "
+ DoubleToStr(MarketInfo(Symbol(),MODE_STOPLEVEL) + MarketInfo(Symbol(),MODE_SPREAD),0)
+ " points away from the current price");
return (false);
}
RefreshRates();
int result = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, sl, tp, "FxProQuant" + "(" + WindowExpertName() + ") " + TradeComment, __STRATEGY_MAGIC + MagicIndex);
if (result == -1){
Print("Failed to Buy: " + IntegerToString(GetLastError()));
Sleep(__SLEEP_AFTER_EXECUTION_FAIL);
return(false);
}
return(true);
}
double Transform (double Value, int Transformation)
{
static double pipSize = 0;
if(pipSize == 0) pipSize = Point * (1 + 9 * (Digits == 3 || Digits == 5));
switch(Transformation)
{
case 0: return(Value/Point);
case 1: return(Value/pipSize);
case 2: return(Value*Point);
case 3: return(Value*pipSize);
default: return(0);
}
}
Files: 0000001_testing_see_if_open.mq4 8 kb