MQL5: Dymmy ZigZag (Harish upwork strategy)
//+------------------------------------------------------------------+
//| Dummy zigzag.mq5 |
//| Copyright 2023, MetaQuotes Ltd. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link "https://www.mql5.com"
#property version "1.00"
input string TradeStartTime = "00:00";
input string TradeStopTime = "13:25";
input bool Positional=true;
input double MagicNumber=12345;
input double Lotsize=1;
input double RoundOffLevel=1;
input double RoundOfDist=1;
input bool Trend =false;
input bool useDummy =false;
input int DummyLevel=0;
bool runOnce=false,first=false;
double buylevel=0,selllevel=0,roundoffval,ltp;
string Trade=NULL;
int buycount=0,sellcount=0;
#include <Trade\Trade.mqh>
CTrade trade;
bool EAActivated = false;
bool buydummydone=false,selldummydone=false;
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double RoundToNearest(double value, double interval)
{
return MathRound(value / interval) * interval;
}
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
double ask,bid;
void OnTick()
{
ltp=iClose(Symbol(),PERIOD_CURRENT,0);
if(Trend ==false)
{
ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
bid=SymbolInfoDouble(Symbol(),SYMBOL_BID);
}
if(Trend==true)
{
ask= SymbolInfoDouble(Symbol(),SYMBOL_BID);
bid= SymbolInfoDouble(Symbol(),SYMBOL_ASK);
}
if(Positional==true)
{
EAActivated = true;
}
if(Positional==false)
{
datetime current_time = TimeCurrent();
datetime start_time = StringToTime(TradeStartTime);
datetime stop_time = StringToTime(TradeStopTime);
if(current_time >= start_time && current_time <= stop_time)
{
EAActivated = true;
}
else
{
EAActivated = false;
close_buy_position();
close_sell_position();
runOnce=false;
buylevel=0;
selllevel=0;
first=false;
}
}
Comment("selllevel: "+selllevel+"\n\nbuylevel: "+buylevel+"\n\nTrade: "+Trade);
if(runOnce==false&& EAActivated == true)
{
roundoffval=RoundToNearest(ltp, RoundOffLevel);
buylevel=roundoffval-RoundOfDist;
selllevel=roundoffval+RoundOfDist;
runOnce=true;
}
if(runOnce==true&& EAActivated == true)
{
if(ask<=buylevel&&first==false)
{
first=true;
Alert("Initial Buy @ "+Symbol());
if(useDummy==true)
{
if(Trend ==false)
{
buydraw();
if(buycount==DummyLevel)
{
trade.SetExpertMagicNumber(MagicNumber);
trade.Buy(Lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits),0,0," Algosangrur: Programetix Dummy Zig Zag Buy");
}
}
if(Trend ==true)
{
selldraw();
if(buycount==DummyLevel)
{
trade.SetExpertMagicNumber(MagicNumber);
trade.Sell(Lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits),0,0," Algosangrur: Programetix Dummy Zig Zag Sell");
}
}
buycount++;
sellcount=0;
}
if(useDummy==false)
{
if(Trend ==false)
{
trade.SetExpertMagicNumber(MagicNumber);
trade.Buy(Lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits),0,0," Algosangrur: Programetix Dummy Zig Zag Buy");
}
if(Trend ==true)
{
trade.SetExpertMagicNumber(MagicNumber);
trade.Sell(Lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits),0,0," Algosangrur: Programetix Dummy Zig Zag Sell");
}
}
buylevel=RoundToNearest(ltp, RoundOffLevel)-RoundOfDist;
selllevel=RoundToNearest(ltp, RoundOffLevel)+RoundOfDist;
Trade="BUY";
}
if(bid>=selllevel&&first==false)
{
first=true;
Alert("Initial Sell @ "+Symbol());
if(useDummy==true)
{
if(Trend ==false&& sellcount==DummyLevel)
{
trade.SetExpertMagicNumber(MagicNumber);
trade.Sell(Lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits),0,0," Algosangrur: Programetix Dummy Zig Zag Sell");
}
if(Trend ==true&& sellcount==DummyLevel)
{
trade.SetExpertMagicNumber(MagicNumber);
trade.Buy(Lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits),0,0," Algosangrur: Programetix Dummy Zig Zag Buy");
}
sellcount++;
buycount=0;
}
if(useDummy==false)
{
if(Trend ==false)
{
trade.SetExpertMagicNumber(MagicNumber);
trade.Sell(Lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits),0,0," Algosangrur: Programetix Dummy Zig Zag Sell");
}
if(Trend ==true)
{
trade.SetExpertMagicNumber(MagicNumber);
trade.Buy(Lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits),0,0," Algosangrur: Programetix Dummy Zig Zag Buy");
}
}
buylevel=RoundToNearest(ltp, RoundOffLevel)-RoundOfDist;
selllevel=RoundToNearest(ltp, RoundOffLevel)+RoundOfDist;
Trade="SHORT";
}
if(first==true&& EAActivated == true)
{
if(Trade=="BUY"&&bid<=buylevel)
{
if(useDummy==true)
{
if(Trend ==false)
{
close_buy_position();
buydraw();
if(buycount==DummyLevel)
{
trade.SetExpertMagicNumber(MagicNumber);
trade.Buy(Lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits),0,0," Algosangrur: Programetix Dummy Zig Zag Buy");
}
}
if(Trend ==true)
{
close_sell_position();
selldraw();
if(buycount==DummyLevel)
{
trade.SetExpertMagicNumber(MagicNumber);
trade.Sell(Lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits),0,0," Algosangrur: Programetix Dummy Zig Zag Sell");
}
}
buycount++;
}
if(useDummy==false)
{
if(Trend ==false)
{
close_buy_position();
buydraw();
}
if(Trend ==true)
{
close_sell_position();
selldraw();
}
}
buylevel=RoundToNearest(ltp, RoundOffLevel)-RoundOfDist;
selllevel=RoundToNearest(ltp, RoundOffLevel)+RoundOfDist;
}
if(Trade=="BUY"&&bid>=selllevel)
{
Trade="SHORT";
if(useDummy==true)
{
if(Trend ==false)
{
close_buy_position();
// trade.SetExpertMagicNumber(MagicNumber);
//trade.Sell(Lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits),0,0," Algosangrur: Programetix Dummy Zig Zag Sell");
}
if(Trend ==true)
{
close_sell_position();
// trade.SetExpertMagicNumber(MagicNumber);
// trade.Buy(Lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits),0,0," Algosangrur: Programetix Dummy Zig Zag Buy");
}
buycount=0;
sellcount++;
}
if(useDummy==false)
{
if(Trend ==false)
{
close_buy_position();
trade.SetExpertMagicNumber(MagicNumber);
trade.Sell(Lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits),0,0," Algosangrur: Programetix Dummy Zig Zag Sell");
}
if(Trend ==true)
{
close_sell_position();
trade.SetExpertMagicNumber(MagicNumber);
trade.Buy(Lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits),0,0," Algosangrur: Programetix Dummy Zig Zag Buy");
}
}
buylevel=RoundToNearest(ltp, RoundOffLevel)-RoundOfDist;
selllevel=RoundToNearest(ltp, RoundOffLevel)+RoundOfDist;
}
if(Trade=="SHORT"&&ask>=selllevel)
{
if(useDummy==true)
{
if(Trend ==false)
{
close_sell_position();
selldraw();
if(sellcount==DummyLevel)
{
trade.SetExpertMagicNumber(MagicNumber);
trade.Sell(Lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits),0,0," Algosangrur: Programetix Dummy Zig Zag Sell");
}
}
if(Trend ==true)
{
close_buy_position();
buydraw();
if(sellcount==DummyLevel)
{
trade.SetExpertMagicNumber(MagicNumber);
trade.Buy(Lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits),0,0," Algosangrur: Programetix Dummy Zig Zag Buy");
}
}
sellcount++;
}
if(useDummy==false)
{
if(Trend ==false)
{
close_sell_position();
selldraw();
}
if(Trend ==true)
{
close_buy_position();
buydraw();
}
}
buylevel=RoundToNearest(ltp, RoundOffLevel)-RoundOfDist;
selllevel=RoundToNearest(ltp, RoundOffLevel)+RoundOfDist;
}
if(Trade=="SHORT"&&ask<=buylevel)
{
Trade="BUY";
if(useDummy==true)
{
if(Trend ==false)
{
close_sell_position();
// trade.SetExpertMagicNumber(MagicNumber);
// trade.Buy(Lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits),0,0," Algosangrur:Programetix Dummy Zig Zag Buy");
}
if(Trend ==true)
{
close_buy_position();
// trade.SetExpertMagicNumber(MagicNumber);
// trade.Sell(Lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits),0,0," Algosangrur: Programetix Dummy Zig Zag Sell");
}
buycount++;
sellcount=0;
}
if(useDummy==false)
{
if(Trend ==false)
{
close_sell_position();
trade.SetExpertMagicNumber(MagicNumber);
trade.Buy(Lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits),0,0," Algosangrur:Programetix Dummy Zig Zag Buy");
}
if(Trend ==true)
{
close_buy_position();
trade.SetExpertMagicNumber(MagicNumber);
trade.Sell(Lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits),0,0," Algosangrur: Programetix Dummy Zig Zag Sell");
}
}
buylevel=RoundToNearest(ltp, RoundOffLevel)-RoundOfDist;
selllevel=RoundToNearest(ltp, RoundOffLevel)+RoundOfDist;
}
}
}
}
//+------------------------------------------------------------------+
void close_sell_position()
{
for(int i=PositionsTotal()-1; i>=0; i--)
{
string currencypair=PositionGetSymbol(i);
int position_direction=PositionGetInteger(POSITION_TYPE);
int posmagic=PositionGetInteger(POSITION_MAGIC);
if(currencypair==Symbol() && position_direction == POSITION_TYPE_SELL&& int(posmagic) == int(MagicNumber))
{
ulong ticket=PositionGetTicket(i);
trade.PositionClose(ticket);
}
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void close_buy_position()
{
for(int i=PositionsTotal()-1; i>=0; i--)
{
string currencypair=PositionGetSymbol(i);
int position_direction=PositionGetInteger(POSITION_TYPE);
int posmagic=PositionGetInteger(POSITION_MAGIC);
if(currencypair==Symbol() && position_direction == POSITION_TYPE_BUY && int(posmagic) == int(MagicNumber)
)
{
ulong ticket=PositionGetTicket(i);
trade.PositionClose(ticket);
}
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void buydraw()
{
string arrowName="BUYSIGNAL"+iTime(Symbol(),PERIOD_CURRENT,0);
ObjectCreate(Symbol(),arrowName,OBJ_ARROW_BUY,0,iTime(Symbol(),PERIOD_CURRENT,1),iHigh(Symbol(),PERIOD_CURRENT,1));
ObjectSetInteger(0, arrowName, OBJPROP_COLOR, clrLimeGreen);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void selldraw()
{
string arrowName="SELLSIGNAL"+iTime(Symbol(),PERIOD_CURRENT,0);
ObjectCreate(Symbol(),arrowName,OBJ_ARROW_SELL,0,TimeCurrent(),iHigh(Symbol(),PERIOD_CURRENT,1));
ObjectSetInteger(0, arrowName, OBJPROP_COLOR, clrGold);
}
//+------------------------------------------------------------------+
Comments
Post a Comment