//+------------------------------------------------------------------+ //| EA_Stochastic.mq4 | //| Victor Velchev | //| victor.velchev@gmail.com | //+------------------------------------------------------------------+ #property copyright "Victor Velchev" #property link "victor.velchev@gmail.com" #include bool Secure = false; // take only high probability trades bool Equilibrium = false; // determine dollar action if traded pair has dollar extern string Separator0 = "----------"; extern string Setup1 = "First stochastic (Short term)"; extern int K1 = 5; extern int D1 = 3; extern int Slowing1 = 3; extern string Separator1 = "----------"; extern string Setup2 = "First stochastic (Medium term)"; extern int K2 = 20; extern int D2 = 10; extern int Slowing2 = 20; extern string Separator2 = "----------"; extern string Setup3 = "First stochastic (Long term)"; extern int K3 = 50; extern int D3 = 10; extern int Slowing3 = 50; extern string Separator3 = "----------"; extern string Text = "Safe = True, Signal crosses, Safe = False, Main crosses"; extern bool Safe = true; extern string Separator4 = "----------"; extern string Text1 = "Stochastic levels:"; extern int Top = 80; extern int Bottom = 20; int Ticket; extern int Identifier = 9812; int TS; extern int TP = 25; extern bool StopLossMode = True; extern int StopLoss = 30; extern int Slippage = 3; extern double Lots = 0.1; bool Ordered = false; string Name; double StopLossLevel; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- for (int i = 0; i <= OrdersTotal(); i++) { OrderSelect(i, SELECT_BY_POS); if ((OrderSymbol() == Symbol()) && (OrderMagicNumber() == Identifier)) { Ticket = OrderTicket(); Ordered = true; } } //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- // //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---- if ((Secure == false) && (Ordered == false)) { if (Equilibrium == false) { // Trend is up if (iStochastic(Symbol(), 0, K2, D2, Slowing2, MODE_SMA, 0, MODE_MAIN, 0) > iStochastic(Symbol(), 0, K3, D3, Slowing3, MODE_SMA, 0, MODE_MAIN, 0)) { // There is a continuance in the up trend if ((iStochastic(Symbol(), 0, K2, D2, Slowing2, MODE_SMA, 0, MODE_MAIN, 0) > iStochastic(Symbol(), 0, K2, D2, Slowing2, MODE_SMA, 0, MODE_MAIN, 1)) && (iStochastic(Symbol(), 0, K3, D3, Slowing3, MODE_SMA, 0, MODE_MAIN, 0) > iStochastic(Symbol(), 0, K3, D3, Slowing3, MODE_SMA, 0, MODE_MAIN, 1))) { // We have a buy signal if ((iStochastic(Symbol(), 0, K2, D2, Slowing2, MODE_SMA, 0, MODE_MAIN, 0) < Top) && (iStochastic(Symbol(), 0, K3, D3, Slowing3, MODE_SMA, 0, MODE_MAIN, 0) < Top) && (iStochastic(Symbol(), 0, K2, D2, Slowing2, MODE_SMA, 0, MODE_MAIN, 0) > iStochastic(Symbol(), 0, K2, D2, Slowing2, MODE_SMA, 0, MODE_SIGNAL, 0)) && (iStochastic(Symbol(), 0, K3, D3, Slowing3, MODE_SMA, 0, MODE_MAIN, 0) > iStochastic(Symbol(), 0, K3, D3, Slowing3, MODE_SMA, 0, MODE_SIGNAL, 0))) { if (StopLossMode) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0; if (Safe == true) { if (iStochastic(Symbol(), 0, K1, D1, Slowing1, MODE_SMA, 0, MODE_SIGNAL, 0) < Bottom) { Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, (Ask + (TP * Point)), "Advisor", Identifier, 0, Green); if (Ticket > 0) { Ordered = true; Name = Ticket + ".gif"; WindowScreenShot(Name, 800, 600); Print("EA successfully ordered at ", Ask, " with ", Lots, ". Ticket ID is ", Ticket, "."); } if (Ticket < 0) { Print("EA failed to order at ", Ask, " with ", Lots, ". Error is #", GetLastError()); } } } if (Safe == false) { if (iStochastic(Symbol(), 0, K1, D1, Slowing1, MODE_SMA, 0, MODE_MAIN, 0) < Bottom) { Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, (Ask + (TP * Point)), "Advisor", Identifier, 0, Green); if (Ticket > 0) { Ordered = true; Name = Ticket + ".gif"; WindowScreenShot(Name, 800, 600); Print("EA successfully ordered at ", Ask, " with ", Lots, ". Ticket ID is ", Ticket, "."); } if (Ticket < 0) { Print("EA failed to order at ", Ask, " with ", Lots, ". Error is #", GetLastError()); } } } } } } // Trend is down if (iStochastic(Symbol(), 0, K2, D2, Slowing2, MODE_SMA, 0, MODE_MAIN, 0) < iStochastic(Symbol(), 0, K3, D3, Slowing3, MODE_SMA, 0, MODE_MAIN, 0)) { // There is a continuance in the down trend if ((iStochastic(Symbol(), 0, K2, D2, Slowing2, MODE_SMA, 0, MODE_MAIN, 0) < iStochastic(Symbol(), 0, K2, D2, Slowing2, MODE_SMA, 0, MODE_MAIN, 1)) && (iStochastic(Symbol(), 0, K3, D3, Slowing3, MODE_SMA, 0, MODE_MAIN, 0) < iStochastic(Symbol(), 0, K3, D3, Slowing3, MODE_SMA, 0, MODE_MAIN, 1))) { // We have a sell signal if ((iStochastic(Symbol(), 0, K2, D2, Slowing2, MODE_SMA, 0, MODE_MAIN, 0) > Bottom) && (iStochastic(Symbol(), 0, K3, D3, Slowing3, MODE_SMA, 0, MODE_MAIN, 0) > Bottom) && (iStochastic(Symbol(), 0, K2, D2, Slowing2, MODE_SMA, 0, MODE_MAIN, 0) < iStochastic(Symbol(), 0, K2, D2, Slowing2, MODE_SMA, 0, MODE_SIGNAL, 0)) && (iStochastic(Symbol(), 0, K3, D3, Slowing3, MODE_SMA, 0, MODE_MAIN, 0) < iStochastic(Symbol(), 0, K3, D3, Slowing3, MODE_SMA, 0, MODE_SIGNAL, 0))) { if (StopLossMode) StopLossLevel = Bid + StopLoss * Point; else StopLossLevel = 0.0; if (Safe == true) { if (iStochastic(Symbol(), 0, K1, D1, Slowing1, MODE_SMA, 0, MODE_SIGNAL, 0) > Top) { Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, (Bid - (TP * Point)), "Advisor", Identifier, 0, Red); if (Ticket > 0) { Ordered = true; Name = Ticket + ".gif"; WindowScreenShot(Name, 800, 600); Print("EA successfully ordered at ", Bid, " with ", Lots, ". Ticket ID is ", Ticket, "."); } if (Ticket < 0) { Print("EA failed to order at ", Bid, " with ", Lots, ". Error is #", GetLastError()); } } } if (Safe == false) { if (iStochastic(Symbol(), 0, K1, D1, Slowing1, MODE_SMA, 0, MODE_MAIN, 0) > Top) { Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, (Bid - (TP * Point)), "Advisor", Identifier, 0, Red); if (Ticket > 0) { Ordered = true; Name = Ticket + ".gif"; WindowScreenShot(Name, 800, 600); Print("EA successfully ordered at ", Bid, " with ", Lots, ". Ticket ID is ", Ticket, "."); } if (Ticket < 0) { Print("EA failed to order at ", Bid, " with ", Lots, ". Error is #", GetLastError()); } } } } } } } if (Equilibrium == true) { } } if ((Secure == true) && (Ordered == false)) { if (Equilibrium == false) { } if (Equilibrium == true) { } } if (Ordered == true) { if (OrderSelect(Ticket, SELECT_BY_TICKET) == true) { if (((OrderCloseTime() > 0) || (OrderExpiration() > 0)) && (TimeCurrent() > OrderExpiration())) { Ordered = false; Print("EA couldn\'t find the order. It must have been closed. Resetting order signal."); } // monitor the long position // monitor the short position } } //---- return(0); } //+------------------------------------------------------------------+