//+------------------------------------------------------------------+ //| Swing_System.mq4 | //| Copyright 2017, Kieren Albuquerque | //| https://www.kieren-albuquerque.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2017, Kieren Albuquerque" #property link "https://www.kieren-albuquerque.com" #property version "1.00" #property strict extern int MA_Period = 50; // Input Period of Moving Average extern double TradeLots = 0.02; extern int TakeProfit = 200; extern int TakeProfit_Multi = 1; extern int TradeRange = 150; extern int TradeRange_Multi = 1; extern int ProfitFactor = 40; double moving_average; double total_orders; int ticket1; int ticket2; int ticket3; int ticket4; int ticket5; int ticket6; int ticket7; int ticket8; int ticket9; int ticket10; int ticket11; int ticket12; //Buy double takeprofit_buy; bool first_order_close_buy; bool cal_first_order_buy; bool first_order_check = true; bool cal_level_buy; double range_buy; double traderange_buy1; double traderange_buy2; double traderange_buy3; double traderange_buy4; double traderange_buy5; double profittarget_buy1; double profittarget_buy2; double profittarget_buy3; double profittarget_buy4; double profittarget_buy5; double profitamount_buy1; double profitamount_buy2; double profitamount_buy3; double profitamount_buy4; double profitamount_buy5; bool level1_check_buy; bool profit_level1_check_buy; bool level2_check_buy; bool profit_level2_check_buy; bool level3_check_buy; bool profit_level3_check_buy; bool level4_check_buy; bool profit_level4_check_buy; bool level5_check_buy; bool profit_level5_check_buy; double tradelot1; double tradelot2; double tradelot3; double tradelot4; double tradelot5; double startlevel_buy; //Sell double takeprofit_sell; bool first_order_close_sell; bool cal_first_order_sell; bool cal_level_sell; double range_sell; double traderange_sell1; double traderange_sell2; double traderange_sell3; double traderange_sell4; double traderange_sell5; double profittarget_sell1; double profittarget_sell2; double profittarget_sell3; double profittarget_sell4; double profittarget_sell5; double profitamount_sell1; double profitamount_sell2; double profitamount_sell3; double profitamount_sell4; double profitamount_sell5; bool level1_check_sell; bool profit_level1_check_sell; bool level2_check_sell; bool profit_level2_check_sell; bool level3_check_sell; bool profit_level3_check_sell; bool level4_check_sell; bool profit_level4_check_sell; bool level5_check_sell; bool profit_level5_check_sell; double tradelot1_sell; double tradelot2_sell; double tradelot3_sell; double tradelot4_sell; double tradelot5_sell; double startlevel_sell; void OnTick() { // Placing First Order -----Open----- \\ if (first_order_check == true) { moving_average = iMA(NULL, 0, MA_Period, 0, 0, 0, 1); if (Open[0] < moving_average) { first_order_check = false; startlevel_buy = Ask; ticket1 = OrderSend(Symbol(), OP_BUY, TradeLots, Ask, 10, 0, 0, "Set by Swing_System"); if (ticket1 < 0) { Alert("Error Placing Order"); }else { Alert("First Buy Order Successful"); } cal_first_order_buy = true; cal_level_buy = true; } else { first_order_check = false; startlevel_sell = Bid; ticket7 = OrderSend(Symbol(), OP_SELL, TradeLots, Bid, 10, 0, 0, "Set by Swing_System"); if (ticket7 < 0) { Alert("Error Placing Order"); }else { Alert("First Sell Order Successful"); } cal_first_order_sell = true; cal_level_sell = true; } } if (cal_first_order_buy == true) { cal_first_order_buy = false; takeprofit_buy = Ask + TakeProfit * Point * TakeProfit_Multi; first_order_close_buy = true; Alert("TakeProfit:", takeprofit_buy); } if (first_order_close_buy == true) { if (Bid >= takeprofit_buy) { first_order_close_buy = false; CloseAll(); Alert("Closed First Buy Order"); } } if (cal_first_order_sell == true) { cal_first_order_sell = false; takeprofit_sell = Bid - TakeProfit * Point * TakeProfit_Multi; first_order_close_sell = true; Alert("TakeProfit:", takeprofit_sell); } if (first_order_close_sell == true) { if (Ask <= takeprofit_sell) { first_order_close_sell = false; CloseAll(); Alert("Closed First Sell Order"); } } // Placing First Order -----Close----- \\ // Get Total Orders -----Open----- \\ total_orders = OrdersTotal(); // Calculate Number Of Open Orders \\ if (total_orders == 0) { // If 0, Loop Previous Function \\ first_order_check = true; } // Get Total Orders -----Close----- \\ // Calulation for Level Buy -----Open-----\\ if (cal_level_buy == true) { cal_level_buy = false; range_buy = TradeRange * Point * TakeProfit_Multi; traderange_buy1 = startlevel_buy - range_buy; traderange_buy2 = traderange_buy1 - (range_buy*2); traderange_buy3 = traderange_buy2 - (range_buy*4); traderange_buy4 = traderange_buy3 - (range_buy*8); traderange_buy5 = traderange_buy4 - (range_buy*16); Alert("TR1:", traderange_buy1); Alert("TR2:", traderange_buy2); Alert("TR3:", traderange_buy3); Alert("TR4:", traderange_buy4); Alert("TR5:", traderange_buy5); profitamount_buy1 = startlevel_buy-traderange_buy1; profitamount_buy2 = startlevel_buy-traderange_buy2; profitamount_buy3 = startlevel_buy-traderange_buy3; profitamount_buy4 = startlevel_buy-traderange_buy4; profitamount_buy5 = startlevel_buy-traderange_buy5; profittarget_buy1 = traderange_buy1 + profitamount_buy1*ProfitFactor/100; profittarget_buy2 = traderange_buy2 + profitamount_buy2*ProfitFactor/100; profittarget_buy3 = traderange_buy3 + profitamount_buy3*ProfitFactor/100; profittarget_buy4 = traderange_buy4 + profitamount_buy4*ProfitFactor/100; profittarget_buy5 = traderange_buy5 + profitamount_buy5*ProfitFactor/100; Alert("TP1:", profittarget_buy1); Alert("TP2:", profittarget_buy2); Alert("TP3:", profittarget_buy3); Alert("TP4:", profittarget_buy4); Alert("TP5:", profittarget_buy5); tradelot1 = TradeLots*2; tradelot2 = TradeLots*4; tradelot3 = TradeLots*8; tradelot4 = TradeLots*16; tradelot5 = TradeLots*32; level1_check_buy =true; } // Calulation for Level Buy-----Close-----\\ // Placing Level Buy1 -----Open-----\\ if(level1_check_buy == true) { if (Ask<= traderange_buy1) { level2_check_buy =true; level1_check_buy = false; profit_level1_check_buy =true; ticket2 = OrderSend(Symbol(), OP_BUY, tradelot1, Ask, 10, 0, 0, "Set by Swing_System"); if (ticket2 < 0) { Alert("Error Placing Buy_Level1 Order"); }else { Alert("Buy_Level1 Order Successful"); } } } if(profit_level1_check_buy == true) { if (Bid>= profittarget_buy1) { profit_level1_check_buy = false; CloseAll(); Alert("Closed Buy_Level1 Order"); } } // Placing Level Buy1 -----Close-----\\ // Placing Level Buy2 -----Open-----\\ if(level2_check_buy == true) { if (Ask<= traderange_buy2) { level3_check_buy =true; level2_check_buy = false; profit_level2_check_buy =true; ticket3 = OrderSend(Symbol(), OP_BUY, tradelot2, Ask, 10, 0, 0, "Set by Swing_System"); if (ticket3 < 0) { Alert("Error Placing Buy_Level2 Order"); }else { Alert("Buy_Level2 Order Successful"); } } } if(profit_level2_check_buy == true) { if (Bid>= profittarget_buy2) { profit_level2_check_buy = false; CloseAll(); Alert("Closed Buy_Level2 Order"); } } // Placing Level Buy2 -----Close-----\\ // Placing Level Buy3 -----Open-----\\ if(level3_check_buy == true) { if (Ask<= traderange_buy3) { level4_check_buy =true; level3_check_buy = false; profit_level3_check_buy =true; ticket4 = OrderSend(Symbol(), OP_BUY, tradelot3, Ask, 10, 0, 0, "Set by Swing_System"); if (ticket4 < 0) { Alert("Error Placing Buy_Level3 Order"); }else { Alert("Buy_Level3 Order Successful"); } } } if(profit_level3_check_buy == true) { if (Bid>= profittarget_buy3) { profit_level3_check_buy = false; CloseAll(); Alert("Closed Buy_Level3 Order"); } } // Placing Level Buy3 -----Close-----\\ // Placing Level Buy4 -----Open-----\\ if(level4_check_buy == true) { if (Ask<= traderange_buy4) { level5_check_buy =true; level4_check_buy = false; profit_level4_check_buy =true; ticket5 = OrderSend(Symbol(), OP_BUY, tradelot4, Ask, 10, 0, 0, "Set by Swing_System"); if (ticket5 < 0) { Alert("Error Placing Buy_Level4 Order"); }else { Alert("Buy_Level4 Order Successful"); } } } if(profit_level4_check_buy == true) { if (Bid>= profittarget_buy4) { profit_level4_check_buy = false; CloseAll(); Alert("Closed Buy_Level4 Order"); } } // Placing Level Buy4 -----Close-----\\ // Placing Level Buy5 -----Open-----\\ if(level5_check_buy == true) { if (Ask<= traderange_buy5) { level5_check_buy = false; profit_level5_check_buy =true; ticket6 = OrderSend(Symbol(), OP_BUY, tradelot5, Ask, 10, 0, 0, "Set by Swing_System"); if (ticket6 < 0) { Alert("Error Placing Buy_Level5 Order"); }else { Alert("Buy_Level5 Order Successful"); } } } if(profit_level5_check_buy == true) { if (Bid>= profittarget_buy5) { profit_level5_check_buy = false; CloseAll(); Alert("Closed Buy_Level5 Order"); } } // Placing Level Buy5 -----Close-----\\ // Calulation for Level Sell -----Open-----\\ if (cal_level_sell == true) { cal_level_sell = false; range_sell = TradeRange * Point * TakeProfit_Multi; traderange_sell1 = startlevel_sell + range_sell; traderange_sell2 = traderange_sell1 + (range_sell*2); traderange_sell3 = traderange_sell2 + (range_sell*4); traderange_sell4 = traderange_sell3 + (range_sell*8); traderange_sell5 = traderange_sell4 + (range_sell*16); Alert("TR1:", traderange_sell1); Alert("TR2:", traderange_sell2); Alert("TR3:", traderange_sell3); Alert("TR4:", traderange_sell4); Alert("TR5:", traderange_sell5); profitamount_sell1 = traderange_sell1-startlevel_sell; profitamount_sell2 = traderange_sell2-startlevel_sell; profitamount_sell3 = traderange_sell3-startlevel_sell; profitamount_sell4 = traderange_sell4-startlevel_sell; profitamount_sell5 = traderange_sell5-startlevel_sell; profittarget_sell1 = traderange_sell1 - profitamount_sell1*ProfitFactor/100; profittarget_sell2 = traderange_sell2 - profitamount_sell2*ProfitFactor/100; profittarget_sell3 = traderange_sell3 - profitamount_sell3*ProfitFactor/100; profittarget_sell4 = traderange_sell4 - profitamount_sell4*ProfitFactor/100; profittarget_sell5 = traderange_sell5 - profitamount_sell5*ProfitFactor/100; Alert("TP1:", profittarget_sell1); Alert("TP2:", profittarget_sell2); Alert("TP3:", profittarget_sell3); Alert("TP4:", profittarget_sell4); Alert("TP5:", profittarget_sell5); tradelot1_sell = TradeLots*2; tradelot2_sell = TradeLots*4; tradelot3_sell = TradeLots*8; tradelot4_sell = TradeLots*16; tradelot5_sell = TradeLots*32; level1_check_sell =true; } // Calulation for Level sell-----Close-----\\ // Placing Level sell1 -----Open-----\\ if(level1_check_sell == true) { if (Bid>= traderange_sell1) { level2_check_sell =true; level1_check_sell = false; profit_level1_check_sell =true; ticket8 = OrderSend(Symbol(), OP_SELL, tradelot1_sell, Bid, 10, 0, 0, "Set by Swing_System"); if (ticket8 < 0) { Alert("Error Placing sell_Level1 Order"); }else { Alert("sell_Level1 Order Successful"); } } } if(profit_level1_check_sell == true) { if (Ask<= profittarget_sell1) { profit_level1_check_sell = false; CloseAll(); Alert("Closed sell_Level1 Order"); } } // Placing Level sell1 -----Close-----\\ // Placing Level sell2 -----Open-----\\ if(level2_check_sell == true) { if (Bid>= traderange_sell2) { level3_check_sell =true; level2_check_sell = false; profit_level2_check_sell =true; ticket9 = OrderSend(Symbol(), OP_SELL, tradelot2_sell, Bid, 10, 0, 0, "Set by Swing_System"); if (ticket9 < 0) { Alert("Error Placing sell_Level2 Order"); }else { Alert("sell_Level2 Order Successful"); } } } if(profit_level2_check_sell == true) { if (Ask<= profittarget_sell2) { profit_level2_check_sell = false; CloseAll(); Alert("Closed sell_Level2 Order"); } } // Placing Level sell2 -----Close-----\\ // Placing Level sell3 -----Open-----\\ if(level3_check_sell == true) { if (Bid>= traderange_sell3) { level4_check_sell =true; level3_check_sell = false; profit_level3_check_sell =true; ticket10 = OrderSend(Symbol(), OP_SELL, tradelot3_sell, Bid, 10, 0, 0, "Set by Swing_System"); if (ticket10 < 0) { Alert("Error Placing sell_Level3 Order"); }else { Alert("sell_Level3 Order Successful"); } } } if(profit_level3_check_sell == true) { if (Ask<= profittarget_sell3) { profit_level3_check_sell = false; CloseAll(); Alert("Closed sell_Level3 Order"); } } // Placing Level sell3 -----Close-----\\ // Placing Level sell4 -----Open-----\\ if(level4_check_sell == true) { if (Bid>= traderange_sell4) { level5_check_sell =true; level4_check_sell = false; profit_level4_check_sell =true; ticket11 = OrderSend(Symbol(), OP_SELL, tradelot4_sell, Bid, 10, 0, 0, "Set by Swing_System"); if (ticket11 < 0) { Alert("Error Placing sell_Level4 Order"); }else { Alert("sell_Level4 Order Successful"); } } } if(profit_level4_check_sell == true) { if (Ask<= profittarget_sell4) { profit_level4_check_sell = false; CloseAll(); Alert("Closed sell_Level4 Order"); } } // Placing Level sell4 -----Close-----\\ // Placing Level sell5 -----Open-----\\ if(level5_check_sell == true) { if (Bid>= traderange_sell5) { level5_check_sell = false; profit_level5_check_sell =true; ticket12 = OrderSend(Symbol(), OP_SELL, tradelot5_sell, Bid, 10, 0, 0, "Set by Swing_System"); if (ticket12 < 0) { Alert("Error Placing sell_Level5 Order"); }else { Alert("sell_Level5 Order Successful"); } } } if(profit_level5_check_sell == true) { if (Ask<= profittarget_sell5) { profit_level5_check_sell = false; CloseAll(); Alert("Closed sell_Level5 Order"); } } // Placing Level sell5 -----Close-----\\ } // Closing All Orders -----Open----- \\ void CloseAll() { int i; bool result = false; while (OrdersTotal() > 0) { // Close open positions first to lock in profit/loss for (i = OrdersTotal() - 1; i >= 0; i--) { if (OrderSelect(i, SELECT_BY_POS) == false) continue; result = false; if (OrderType() == OP_BUY) result = OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 10); if (OrderType() == OP_SELL) result = OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 10); } } } // Closing All Orders -----Close----- \\