#property strict #include CAppDialog OurInterface; #include CButton OrderButton,NewTPSLButton,AllClose,ResetTPSL; #include CEdit LotSize,StartSL,StartTP,FirstHour,FirstMin,FirstAMPM,TradeTypeEdit; #include CLabel LotLabel1,StartSLLabel,StartTPLabel,FirstSchedule,Colon1,TradeTypeLabel,TradeHint; #include bool removeFromThisChartOnly = true; double TradeVolume = 1; double sl = 200; double tp = 500; int MagicBuyNews = 111; int MagicSellNews = 222; double buynewsl = 10000000; double sellnewsl = 0; double buysl = 10000000; double sellsl = 0; int start_hour = 5; int start_min = 30; string start_AMPM = "PM"; string TradeType="None"; const string LotName = "Lot_Volume1"; const string Start_SL = "Start_SL"; const string Start_TP = "Start_TP"; const string First_Hour = "First_Hour"; const string First_Min = "First_Min"; const string First_AMPM = "First_AMPM"; const string TradeTypeName = "Trade_Type"; double InitialAccountBalance = AccountBalance(); double MaxAccountBalance = 0; double MinAccountBalance = 1000000; double MaxEquity = 0; double MinEquity = 1000000; datetime Today = StrToTime(StringConcatenate(Year(), ".", Month(), ".", Day())); int start_hour_set=start_hour; datetime start_time = Today+start_hour_set*3600+start_min*60; int OnInit() { string SymbolNews =ChartSymbol(); if (SymbolNews=="XAUUSD") { TradeVolume = 0.01; sl = 200; tp = 1000; start_hour = 5; start_min = 30; start_AMPM = "PM"; MagicBuyNews = 100111800; MagicSellNews = 100222800; } if (SymbolNews=="AUDUSD") { TradeVolume = 0.2; sl = 100; tp = 100; start_hour = 6; start_min = 30; start_AMPM = "AM"; MagicBuyNews = 310111800; MagicSellNews = 310222800; } if (SymbolNews=="EURUSD") { TradeVolume = 0.1; sl = 100; tp = 100; start_hour = 2; start_min = 0; start_AMPM = "PM"; MagicBuyNews = 320111800; MagicSellNews = 320222800; } if (SymbolNews=="GBPUSD") { TradeVolume = 0.2; // 2 for Full sl = 100; tp = 100; start_hour = 1; start_min = 30; start_AMPM = "PM"; MagicBuyNews = 330111800; MagicSellNews = 330222800; } if (SymbolNews=="USDCAD") { TradeVolume = 0.1; sl = 100; tp = 100; start_hour = 5; start_min = 30; start_AMPM = "PM"; MagicBuyNews = 340111800; MagicSellNews = 340222800; } if (SymbolNews=="USDCHF") { TradeVolume = 0.2; // 3 Tested and found OK sl = 100; tp = 100; start_hour = 12; start_min = 30; start_AMPM = "PM"; MagicBuyNews = 350111800; MagicSellNews = 350222800; } if (SymbolNews=="USDJPY") { TradeVolume = 0.2; sl = 100; tp = 100; start_hour = 3; start_min = 45; start_AMPM = "AM"; MagicBuyNews = 360111800; MagicSellNews = 360222800; } if (SymbolNews=="NZDUSD") { TradeVolume = 0.2; sl = 100; tp = 100; start_hour = 3; start_min = 45; start_AMPM = "AM"; MagicBuyNews = 370111800; MagicSellNews = 370222800; } ChartSetInteger(0,CHART_EVENT_MOUSE_MOVE,true); OurInterface.Create(0,StringConcatenate("EA News Time for ",SymbolNews),0,100,100,380,320); FirstSchedule.Create(0,"FirstScheduleLabel",0,10,10,50,30); OurInterface.Add(FirstSchedule); FirstSchedule.Text("News Time:"); FirstHour.Create(0,First_Hour,0,100,10,130,30); OurInterface.Add(FirstHour); FirstHour.Text(string(start_hour)); Colon1.Create(0,"Colon",0,132,10,135,30); OurInterface.Add(Colon1); Colon1.Text(":"); FirstMin.Create(0,First_Min,0,140,10,170,30); OurInterface.Add(FirstMin); FirstMin.Text(string(start_min)); FirstAMPM.Create(0,First_AMPM,0,175,10,205,30); OurInterface.Add(FirstAMPM); FirstAMPM.Text(string(start_AMPM)); TradeTypeLabel.Create(0,"TradeTypeLabel",0,10,40,50,60); OurInterface.Add(TradeTypeLabel); TradeTypeLabel.Text("Trade Type:"); TradeTypeEdit.Create(0,TradeTypeName,0,100,40,150,60); OurInterface.Add(TradeTypeEdit); TradeTypeEdit.Text(string(TradeType)); TradeHint.Create(0,"TradeHint",0,160,40,250,60); OurInterface.Add(TradeHint); TradeHint.Text("(Buy/Sell)"); LotLabel1.Create(0,"LotLabel1",0,10,70,50,90); OurInterface.Add(LotLabel1); LotLabel1.Text("Lot Size:"); LotSize.Create(0,LotName,0,100,70,150,90); OurInterface.Add(LotSize); LotSize.Text(string(TradeVolume)); StartSLLabel.Create(0,"StartSLLabel",0,10,100,50,120); OurInterface.Add(StartSLLabel); StartSLLabel.Text("Set SL:"); StartSL.Create(0,Start_SL,0,100,100,140,120); OurInterface.Add(StartSL); StartSL.Text(string(sl)); StartTPLabel.Create(0,"StartTPLabel",0,10,130,50,150); OurInterface.Add(StartTPLabel); StartTPLabel.Text("Set TP:"); StartTP.Create(0,Start_TP,0,100,130,140,150); OurInterface.Add(StartTP); StartTP.Text(string(tp)); NewTPSLButton.Create(0,"NewTPSLButton",0,150,100,260,120); OurInterface.Add(NewTPSLButton); NewTPSLButton.Text("Update TP/SL"); ResetTPSL.Create(0,"ResetButton",0,150,130,260,150); OurInterface.Add(ResetTPSL); ResetTPSL.Text("Reset TP/SL"); OrderButton.Create(0,"OrderButton",0,15,160,125,180); OurInterface.Add(OrderButton); OrderButton.Text("Place Orders"); AllClose.Create(0,"AllCloseButton",0,150,160,260,180); OurInterface.Add(AllClose); AllClose.Text("Close Orders"); OurInterface.Run(); return(INIT_SUCCEEDED); } void OnTick() { Today = StrToTime(StringConcatenate(Year(), ".", Month(), ".", Day())); start_hour_set=start_hour; if (start_AMPM == "PM" && start_hour!=12) start_hour_set=start_hour+12; start_time = Today+start_hour_set*3600+start_min*60; // Stepwise StopLoss for (int b= OrdersTotal()-1;b>=0;b--) { if (OrderSelect(b,SELECT_BY_POS,MODE_TRADES)) { if (OrderSymbol()==Symbol()) { if((LocalTime()>start_time-10 && LocalTime()(OrderOpenPrice()+20*_Point) && buysl>OrderStopLoss()) { buysl = OrderOpenPrice()-sl*_Point; buysl = NormalizeDouble(buysl, _Digits); int BuyModify = OrderModify (OrderTicket(),OrderOpenPrice(), buysl,OrderTakeProfit(),0,clrAqua); } // Various TP Positions if(Bid>buysl+tp*_Point && buysl+tp*_Point>OrderStopLoss()) { buysl= buysl+tp*_Point; buysl = NormalizeDouble(buysl, _Digits); int BuyModify = OrderModify (OrderTicket(),OrderOpenPrice(), buysl,OrderTakeProfit(),0,clrAqua); } } if (OrderType()==OP_SELL && OrderMagicNumber()==MagicSellNews) { if(Ask<(OrderOpenPrice()-20*_Point) && sellslstart_time-61 && LocalTime()start_time-31 && LocalTime()start_time-0.5 && LocalTime()start_time-0.5 && LocalTime() AccountBalance()) MinAccountBalance = AccountBalance(); if (MaxEquity < AccountEquity()) MaxEquity = AccountEquity(); if (MinEquity > AccountEquity()) MinEquity = AccountEquity(); Comment ("Initial Account Balance was ",InitialAccountBalance,", Minimun Account Balance was ",MinAccountBalance,", Max Balance was ",MaxAccountBalance," and Current Balance is ",AccountBalance(), "\nMinimum Equity was ",MinEquity,", Max Equity was ",MaxEquity," and Current Equity is ",AccountEquity()); } // Event Handling void OnChartEvent (const int id,const long &lparam,const double &dparam,const string &sparam) { OurInterface.OnEvent(id,lparam,dparam, sparam); if (id == CHARTEVENT_OBJECT_ENDEDIT){ if(sparam == LotName) { string volumeText = ObjectGetString(0, LotName, OBJPROP_TEXT); TradeVolume = StringToDouble(volumeText); ObjectSetString(0, LotName, OBJPROP_TEXT, string(TradeVolume)); return; } if(sparam == TradeTypeName) { string volumeText = ObjectGetString(0, TradeTypeName, OBJPROP_TEXT); TradeType = volumeText; ObjectSetString(0, TradeTypeName, OBJPROP_TEXT, string(TradeType)); return; } if(sparam == Start_TP) { string volumeText = ObjectGetString(0, Start_TP, OBJPROP_TEXT); tp = StringToDouble(volumeText); ObjectSetString(0, Start_TP, OBJPROP_TEXT, string(tp)); return; } if(sparam == Start_SL) { string volumeText = ObjectGetString(0, Start_SL, OBJPROP_TEXT); sl = StringToDouble(volumeText); ObjectSetString(0, Start_SL, OBJPROP_TEXT, string(sl)); return; } if(sparam == First_Hour) { string volumeText = ObjectGetString(0, First_Hour, OBJPROP_TEXT); start_hour = StrToInteger(volumeText); ObjectSetString(0, First_Hour, OBJPROP_TEXT, string(start_hour)); return; } if(sparam == First_Min) { string volumeText = ObjectGetString(0, First_Min, OBJPROP_TEXT); start_min = StrToInteger(volumeText); ObjectSetString(0, First_Min, OBJPROP_TEXT, string(start_min)); return; } if(sparam == First_AMPM) { string volumeText = ObjectGetString(0, First_AMPM, OBJPROP_TEXT); start_AMPM = volumeText; ObjectSetString(0, First_AMPM, OBJPROP_TEXT, string(start_AMPM)); return; } } // if an object was clicked if(id==CHARTEVENT_OBJECT_CLICK) { }} void OnDeinit(const int reason) { OurInterface.Destroy(reason); } void BuyOrder(int MagicBuy) { double buy = Ask; buy = NormalizeDouble(buy, _Digits); double slbuy = buy-sl*Point; slbuy = NormalizeDouble(slbuy, _Digits); double tpbuy = buy+tp*Point; tpbuy = NormalizeDouble(tpbuy, _Digits); if(sl==0){slbuy=0;} if(tp==0){tpbuy=0;} int orderbuystop = OrderSend (_Symbol,OP_BUY,TradeVolume,buy,50,slbuy,0,NULL,MagicBuy,0,clrBlue); } void SellOrder(int MagicSell) { double sell = Bid; sell = NormalizeDouble(sell, _Digits); double slsell = sell+sl*Point; slsell = NormalizeDouble(slsell, _Digits); double tpsell = sell-tp*Point; tpsell = NormalizeDouble(tpsell, _Digits); if(sl==0){slsell=0;} if(tp==0){tpsell=0;} int ordersell = OrderSend (_Symbol,OP_SELL,TradeVolume,sell,50,slsell,0,NULL,MagicSell,0,clrGreen); } bool CheckBuyOrders(int MagicBuy){ for( int i = 0 ; i < OrdersTotal() ; i++ ) { int OrderBO = OrderSelect( i, SELECT_BY_POS, MODE_TRADES ); if(OrderType()==OP_BUY && OrderMagicNumber()==(MagicBuy)) return(true); } return(false); } bool CheckSellOrders(int MagicSell){ for( int i = 0 ; i < OrdersTotal() ; i++ ) { int OrderSO = OrderSelect( i, SELECT_BY_POS, MODE_TRADES ); if(OrderType()==OP_SELL && OrderMagicNumber()==(MagicSell)) return(true); } return(false); }