//+------------------------------------------------------------------+ //| ATTS.mq4 | //| JTTW-Anas | //| http://www.fxmindtrixacademy.com | //+------------------------------------------------------------------+ //And Down/Down/Down instead of Do/Do/Do if it is possible please? //To learn more about the Advanced Trend Trading Strategy which this Expert Advisor was designed to take advantage of, go to www.fxmindtrixacademy.com //Write something like FXMindTriz Academy's Advanced Trend Trading Strategy Developed by Anas Abba and [Your Name] //Trend - 1 Hour //Confirm - 30 minutes //Trade - 15 Minutes //Buffer - 30 //Risk Per Trade - 1% //Reward Ratio - 3.0 //Account Balance - 10,000 //add spread to sl #property copyright "www.fxmindtrixacademy.com" #property link "www.fxmindtrixacademy.com" #property version "5.00" #property description "To learn more about the Advanced Trend Trading Strategy which this Expert Advisor was designed to take advantage of, go to www.fxmindtrixacademy.com" #property description " " #property description "@2019 - Anas Abba - Handjojo Santoso" #property strict //extern double FixLotSize = 0.03; //Lot Size input int ATTS_Trade_Hour_Start = 0; //Start Trading Hour input int ATTS_Trade_Hour_End = 24; //End Trading Hour input ENUM_TIMEFRAMES ATTS_SMA_Trend_TF = PERIOD_H1; //Trend Timeframe input ENUM_TIMEFRAMES ATTS_SMA_Confirm_TF = PERIOD_M30; //Confirmation Timeframe input ENUM_TIMEFRAMES ATTS_SMA_Trade_TF = PERIOD_M15; //Trade Timeframe input int ATTS_SMA_Period = 60; //Moving Average Period input double ATTS_Entry_Buffer = 30; //Entry Buffer (in Point) - distance between PO and Fractal input double Risk_In_Percent = 1; //Risk Percentage input double Reward_Ratio = 3; //Reward Ratio input bool Move_Initial_SL = false; //Move Initial SL input double ATTS_SL_Buffer = 30; //SL Buffer (in Point) - distance between SL and SMA input bool ATTS_Allow_Partially_Close = false; //Partially close on BEP level input double ATTS_Partially_Percent = 30; //Percent to close input bool AllowJumpToBEP = false; //Allow to jump to BEP level after X points profit input double JumpToBEPPoint = 500; //Jump after X points profit input bool AllowFractalTP = false; //TP on new opposite fractal input bool AllowCutSwitch = true; //Cut and Switch when opposite direction detected double ATTS_TPUSD = 0; //TP in USD (0 = Let's the profit run until get SL) : color PvtLineColor = White; color PvtLabelColor = White; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { return(INIT_SUCCEEDED); } void OnDeinit(const int reason) { } bool ATTS_Close_Above_SMA_Trade_Hi = false; bool ATTS_Close_Below_SMA_Trade_Lo = false; void OnTick() { //CheckProfitUSD(); InfoATTS(); if(Bid > ATTS_Price_Hi_Trend) Trend = "UP"; else if(Bid < ATTS_Price_Lo_Trend) Trend = "DO"; else Trend = "---"; if(Bid > ATTS_Price_Hi_Confirm) Confirm = "UP"; else if(Bid < ATTS_Price_Lo_Confirm) Confirm = "DO"; else Confirm = "---"; if(Bid > ATTS_Price_Hi_Trade) Trade = "UP"; else if(Bid < ATTS_Price_Lo_Trade) Trade = "DO"; else Trade = "---"; InfoOrders(); //Check infoorders lagi just in case cleanmarketorder if(AllowCutSwitch) { CheckCutSwitch(); } if(IsNewCandle(ATTS_SMA_Trade_TF)) { InfoATTS(); if(Bid > ATTS_Price_Hi_Trend) Trend = "UP"; else if(Bid < ATTS_Price_Lo_Trend) Trend = "DO"; else Trend = "---"; if(Bid > ATTS_Price_Hi_Confirm) Confirm = "UP"; else if(Bid < ATTS_Price_Lo_Confirm) Confirm = "DO"; else Confirm = "---"; if(Bid > ATTS_Price_Hi_Trade) Trade = "UP"; else if(Bid < ATTS_Price_Lo_Trade) Trade = "DO"; else Trade = "---"; if(iClose(Symbol(),ATTS_SMA_Trade_TF,1) > ATTS_Price_Hi_Trade) ATTS_Close_Above_SMA_Trade_Hi = true; else ATTS_Close_Above_SMA_Trade_Hi = false; if(iClose(Symbol(),ATTS_SMA_Trade_TF,1) < ATTS_Price_Lo_Trade) ATTS_Close_Below_SMA_Trade_Lo = true; else ATTS_Close_Below_SMA_Trade_Lo = false; ATTSMethod(); } } void CheckCutSwitch() { if(TP_Orders_Total_Market_Buy > 0 && TP_Orders_Total_Market_Sell > 0) { if(Trend == "DO") { bool Modified = false; Modified = OrderClose(TP_Tickets_Market_Buy[0],OrderLots(),Bid,3,clrNONE); if(Modified) Print("Order closed ..."); } if(Trend == "UP") { bool Modified = false; Modified = OrderClose(TP_Tickets_Market_Sell[0],OrderLots(),Ask,3,clrNONE); if(Modified) Print("Order closed ..."); } } } string Trend = ""; string Confirm = ""; string Trade = ""; bool JumpToBEPPointDone = false; bool PartiallyCloseDone = false; void ATTSMethod() { if(TP_Orders_Total_Market_Buy + TP_Orders_Total_Market_Sell == 0) // Jika Tidak Ada Open Posisi { PartiallyCloseDone = false; JumpToBEPPointDone = false; if(Trend == Confirm) { if(Trend == "UP") { if(Trade == "UP") { ATTSOpenPOBUY(); } else if(ATTS_Close_Below_SMA_Trade_Lo) CleanPendingOrder(100); } else if(Trend == "DO") { if(Trade == "DO") { ATTSOpenPOSELL(); } if(ATTS_Close_Above_SMA_Trade_Hi) CleanPendingOrder(100); } } else CleanPendingOrder(100); } else // Jika ada Open Posisi { if(TP_Orders_Total_Market_Buy > 0) { double SL = ATTS_Price_Lo_Trade - (ATTS_SL_Buffer*Point); if(OrderSelect(TP_Tickets_Market_Buy[0],SELECT_BY_TICKET,MODE_TRADES)) { if(SL < OrderStopLoss()) SL = OrderStopLoss(); if(Move_Initial_SL) { bool Modified = false; Modified = OrderModify(TP_Tickets_Market_Buy[0],OrderOpenPrice(),SL,OrderTakeProfit(),NULL,clrNONE); if(Modified) Print("SL modified ..."); } if(ATTS_Allow_Partially_Close && (ATTS_Price_Lo_Trade - (ATTS_SL_Buffer*Point)) >= OrderOpenPrice() && !PartiallyCloseDone) { double LotToClose = TP_Lot_Total_Market_Buy * (ATTS_Partially_Percent / 100); LotToClose = MathCeil(LotToClose / SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN)) * SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN) ; Print("Partially Close Buy Position ", DoubleToStr(LotToClose,3)); if(LotToClose > 0 && LotToClose < OrderLots()) { bool Modified = false; Modified = OrderClose(TP_Tickets_Market_Buy[0],LotToClose,Bid,3,clrNONE); if(Modified) PartiallyCloseDone = true; } } if(AllowJumpToBEP && !JumpToBEPPointDone && (Ask - OrderOpenPrice() >= JumpToBEPPoint*Point)) { SL = OrderOpenPrice() + (MarketInfo(Symbol(),MODE_SPREAD)*Point*2); bool Modified = false; Modified = OrderModify(TP_Tickets_Market_Buy[0],OrderOpenPrice(),SL,OrderTakeProfit(),NULL,clrNONE); if(Modified) JumpToBEPPointDone = true; } if(AllowFractalTP && ATTS_Price_Fractal_Up > Ask && OrderProfit() > 0) CleanMarketOrder(); if(Trend == "DO" && Confirm == "DO" && Trade == "DO" && AllowCutSwitch) { //xxx close buy if( TP_Orders_Total_Market_Sell > 0 || TP_Profit_Buy > 0) { bool Modified = false; Modified = OrderClose(TP_Tickets_Market_Buy[0],OrderLots(),Bid,3,clrNONE); if(Modified) Print("Order closed ..."); } if(TP_Orders_Total_Pending_Stop_Sell == 0) ATTSOpenPOSELL(); CleanPendingOrder(OP_BUYSTOP); } } else Print("NOT SELECTED"); } if(TP_Orders_Total_Market_Sell > 0) { double SL = ATTS_Price_Hi_Trade + (ATTS_SL_Buffer*Point); if(OrderSelect(TP_Tickets_Market_Sell[0],SELECT_BY_TICKET,MODE_TRADES)) { if(SL > OrderStopLoss()) SL = OrderStopLoss(); if(Move_Initial_SL) { bool Modified = false; Modified = OrderModify(TP_Tickets_Market_Sell[0],OrderOpenPrice(),SL,OrderTakeProfit(),NULL,clrNONE); if(Modified) Print("SL modified ..."); } if(ATTS_Allow_Partially_Close && (ATTS_Price_Hi_Trade + (ATTS_SL_Buffer*Point)) <= OrderOpenPrice() && !PartiallyCloseDone) { double LotToClose = TP_Lot_Total_Market_Sell * (ATTS_Partially_Percent / 100); LotToClose = MathCeil(LotToClose / SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN)) * SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN) ; Print("Partially Close Sell Position ", DoubleToStr(LotToClose,3)); if(LotToClose > 0 && LotToClose < OrderLots()) { bool Modified = false; Modified = OrderClose(TP_Tickets_Market_Sell[0],LotToClose,Ask,3,clrNONE); if(Modified) PartiallyCloseDone = true; } } if(AllowJumpToBEP && !JumpToBEPPointDone && (OrderOpenPrice() - Ask >= JumpToBEPPoint*Point)) { SL = OrderOpenPrice() - (MarketInfo(Symbol(),MODE_SPREAD)*Point*2); bool Modified = false; Modified = OrderModify(TP_Tickets_Market_Sell[0],OrderOpenPrice(),SL,OrderTakeProfit(),NULL,clrNONE); if(Modified) JumpToBEPPointDone = true; } if(AllowFractalTP && ATTS_Price_Fractal_Do < Bid && OrderProfit() > 0) CleanMarketOrder(); if(Trend == "UP" && Confirm == "UP" && Trade == "UP" && AllowCutSwitch) { //xxx close buy if(TP_Orders_Total_Market_Buy > 0 || TP_Profit_Sell > 0) { bool Modified = false; Modified = OrderClose(TP_Tickets_Market_Sell[0],OrderLots(),Ask,3,clrNONE); if(Modified) Print("Order closed ..."); } if(TP_Orders_Total_Pending_Stop_Buy == 0) ATTSOpenPOBUY(); CleanPendingOrder(OP_SELLSTOP); } } else Print("NOT SELECTED"); } } } void ATTSOpenPOBUY() { CleanPendingOrder(OP_SELLSTOP); double CheckPrice = (Bid + (MarketInfo(NULL,MODE_STOPLEVEL)*Point)); double POPrice = NormalizeDouble(ATTS_Price_Fractal_Up + (ATTS_Entry_Buffer * Point) + (MarketInfo(NULL,MODE_STOPLEVEL)*Point),Digits); double Lot_Size, SL, TP; Lot_Size = LotCalc(POPrice, ATTS_Price_Lo_Trade); SL = ATTS_Price_Lo_Trade - (ATTS_SL_Buffer*Point); TP = POPrice + ((POPrice - SL) * Reward_Ratio); if(TP_Orders_Total_Pending_Stop_Buy == 0 && Lot_Size > 0) { if(ATTS_Price_Fractal_Up >= CheckPrice) { if(Hour() >= ATTS_Trade_Hour_Start && Hour() <= ATTS_Trade_Hour_End) { OrderEntryATTS(OP_BUYSTOP,POPrice,Lot_Size,SL,TP); } } } else if(TP_Orders_Total_Pending_Stop_Buy > 0 && Lot_Size > 0) { if(OrderSelect(TP_Tickets_Pending_Stop_Buy[0],SELECT_BY_TICKET,MODE_TRADES)) { if((POPrice != NormalizeDouble(OrderOpenPrice(),Digits) || Lot_Size != OrderLots()) && ATTS_Price_Fractal_Up >= CheckPrice) { if(Hour() >= ATTS_Trade_Hour_Start && Hour() <= ATTS_Trade_Hour_End) { CleanPendingOrder(OP_BUYSTOP); OrderEntryATTS(OP_BUYSTOP,POPrice,Lot_Size,SL,TP); } else CleanPendingOrder(OP_BUYSTOP); } } } } void ATTSOpenPOSELL() { CleanPendingOrder(OP_BUYSTOP); double CheckPrice = (Ask - (MarketInfo(NULL,MODE_STOPLEVEL)*Point)); double POPrice = NormalizeDouble(ATTS_Price_Fractal_Do - (ATTS_Entry_Buffer * Point) - (MarketInfo(NULL,MODE_STOPLEVEL)*Point), Digits); double Lot_Size, SL, TP; Lot_Size = LotCalc(ATTS_Price_Hi_Trade, POPrice); SL = ATTS_Price_Hi_Trade + (ATTS_SL_Buffer*Point); TP = POPrice - ((SL - POPrice) * Reward_Ratio); if(TP_Orders_Total_Pending_Stop_Sell == 0 && Lot_Size > 0) { if(Hour() >= ATTS_Trade_Hour_Start && Hour() <= ATTS_Trade_Hour_End) { if(ATTS_Price_Fractal_Do <= CheckPrice) OrderEntryATTS(OP_SELLSTOP,POPrice,Lot_Size,SL,TP); } } else if(TP_Orders_Total_Pending_Stop_Sell > 0 && Lot_Size > 0) { if(OrderSelect(TP_Tickets_Pending_Stop_Sell[0],SELECT_BY_TICKET,MODE_TRADES)) { if((POPrice != NormalizeDouble(OrderOpenPrice(),Digits) || Lot_Size != OrderLots()) && ATTS_Price_Fractal_Do <= CheckPrice) { if(Hour() >= ATTS_Trade_Hour_Start && Hour() <= ATTS_Trade_Hour_End) { CleanPendingOrder(OP_SELLSTOP); OrderEntryATTS(OP_SELLSTOP,POPrice,Lot_Size,SL,TP); } else CleanPendingOrder(OP_SELLSTOP); } } } } double ATTS_Price_Hi_Trend = 0; double ATTS_Price_Lo_Trend = 0; double ATTS_Price_Hi_Confirm = 0; double ATTS_Price_Lo_Confirm = 0; double ATTS_Price_Hi_Trade = 0; double ATTS_Price_Lo_Trade = 0; double ATTS_Price_Fractal_Up = 0; double ATTS_Price_Fractal_Do = 0; void InfoATTS() { ATTS_Price_Hi_Trend = iMA(NULL,ATTS_SMA_Trend_TF,ATTS_SMA_Period,0,MODE_SMA,PRICE_HIGH,1); ATTS_Price_Lo_Trend = iMA(NULL,ATTS_SMA_Trend_TF,ATTS_SMA_Period,0,MODE_SMA,PRICE_LOW,1); ATTS_Price_Hi_Confirm = iMA(NULL,ATTS_SMA_Confirm_TF,ATTS_SMA_Period,0,MODE_SMA,PRICE_HIGH,1); ATTS_Price_Lo_Confirm = iMA(NULL,ATTS_SMA_Confirm_TF,ATTS_SMA_Period,0,MODE_SMA,PRICE_LOW,1); ATTS_Price_Hi_Trade = iMA(NULL,ATTS_SMA_Trade_TF,ATTS_SMA_Period,0,MODE_SMA,PRICE_HIGH,1); ATTS_Price_Lo_Trade = iMA(NULL,ATTS_SMA_Trade_TF,ATTS_SMA_Period,0,MODE_SMA,PRICE_LOW,1); int cntr = 0; do { double NilaiFractal = iFractals(NULL,ATTS_SMA_Trade_TF,MODE_UPPER,cntr); if(NilaiFractal > 0 && NilaiFractal != NULL) { ATTS_Price_Fractal_Up = iFractals(NULL,ATTS_SMA_Trade_TF,MODE_UPPER,cntr); cntr = 0; break; } cntr++; } while (true); do { double NilaiFractal = iFractals(NULL,ATTS_SMA_Trade_TF,MODE_LOWER,cntr); if(NilaiFractal > 0 && NilaiFractal != NULL) { ATTS_Price_Fractal_Do = iFractals(NULL,ATTS_SMA_Trade_TF,MODE_LOWER,cntr); cntr = 0; break; } cntr++; } while(true); } void CheckProfitUSD() { InfoOrders(); if(ATTS_TPUSD > 0 && TP_Profit >= ATTS_TPUSD) { CleanMarketOrder(); } } void CleanMarketOrder() { for (int b=OrdersTotal()-1;b>=0;b--) { if(OrderSelect(b,SELECT_BY_POS,MODE_TRADES)) if(OrderSymbol()==Symbol()) { if(OrderType()==OP_BUY) { if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,clrRed)) Print("Fail to clean BUY orders ..."); } else if(OrderType()==OP_SELL) { if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,clrRed)) Print("Fail to clean SELL orders ..."); } } } TP_Lot_Total=0; TP_Lot_Total_Prev=0; ArrayFree(TP_Lot_Market_Buy); ArrayFree(TP_Lot_Market_Sell); CleanPendingOrder(100); } void CleanPendingOrder(int Direction) { if(Direction == OP_SELLSTOP || Direction == 100) { for(int b=ArraySize(TP_Tickets_Pending_Stop_Sell)-1;b>=0;b--) { if(TP_Tickets_Pending_Stop_Sell[b]>0) if(!OrderDelete(TP_Tickets_Pending_Stop_Sell[b])) Print("Fail to clean sell pending orders ..."); } } if(Direction == OP_BUYSTOP || Direction == 100) { for(int b=ArraySize(TP_Tickets_Pending_Stop_Buy)-1;b>=0;b--) { if(TP_Tickets_Pending_Stop_Buy[b]>0) if(!OrderDelete(TP_Tickets_Pending_Stop_Buy[b])) Print("Fail to clean buy pending orders ..."); } } } void OrderEntryATTS(int Direction, double Price, double NumLot, double SL, double TP) { int ticket = 0 ; switch(Direction) { case OP_BUYSTOP : Print("Price BUY STOP / SL / TP : ", Price, " / " , SL, " / ", TP, " --- ", ATTS_Entry_Buffer*Point); ticket=OrderSend(Symbol(),OP_BUYSTOP,NumLot,Price,3,SL,TP,"ATTS",NULL,0,clrGreen); if(ticket<0) { Print("OrderSend BUYSTOP failed with error #",GetLastError()); } break; case OP_SELLSTOP : Print("Price SELL STOP / SL / TP : ", Price, " / " , SL, " / ", TP," --- ", ATTS_Entry_Buffer*Point); ticket=OrderSend(Symbol(),OP_SELLSTOP,NumLot,Price,3,SL,TP,"ATTS",NULL,0,clrGreen); if(ticket<0) { Print("OrderSend SELLSTOP failed with error #",GetLastError()); } break; } } //GLOBAL VARIABLE int AP_Orders_Total = 0; double AP_Lot_Total = 0; int TP_Tickets_Market_Buy[]; int TP_Tickets_Market_Sell[]; int TP_Tickets_Pending_Stop_Buy[]; int TP_Tickets_Pending_Stop_Sell[]; int TP_Tickets_Pending_Limit_Buy[]; int TP_Tickets_Pending_Limit_Sell[]; int TP_Orders_Total; int TP_Orders_Total_Market_Buy; int TP_Orders_Total_Market_Sell; int TP_Orders_Total_Pending_Stop_Buy; int TP_Orders_Total_Pending_Stop_Sell; int TP_Orders_Total_Pending_Limit_Buy; int TP_Orders_Total_Pending_Limit_Sell; double TP_Lot_Total = 0; double TP_Lot_Total_Prev = 0; double TP_Lot_Total_Market_Buy; double TP_Lot_Total_Market_Sell; double TP_Lot_Total_Pending_Stop_Buy; double TP_Lot_Total_Pending_Stop_Sell; double TP_Lot_Total_Pending_Limit_Buy; double TP_Lot_Total_Pending_Limit_Sell; double TP_Prices_Market_Buy_SL[]; double TP_Prices_Market_Buy_TP[]; double TP_Prices_Market_Sell_SL[]; double TP_Prices_Market_Sell_TP[]; double TP_Prices_Market_Buy[]; double TP_Prices_Market_Sell[]; double TP_Lot_Market_Buy[]; double TP_Lot_Market_Sell[]; string CurrPricePosition; double TP_Profit=0; double TP_Profit_Sell=0; double TP_Profit_Buy=0; double TP_Profit_Max = 0; double TP_Rugi_Max = 0; void InfoOrders() { AP_Orders_Total = OrdersTotal(); AP_Lot_Total = 0; //AllPairs_Lot TP_Orders_Total = 0; TP_Orders_Total_Market_Buy = 0; TP_Orders_Total_Market_Sell = 0; TP_Orders_Total_Pending_Stop_Buy = 0; TP_Orders_Total_Pending_Stop_Sell = 0; TP_Orders_Total_Pending_Limit_Buy=0; TP_Orders_Total_Pending_Limit_Sell=0; TP_Lot_Total = 0; TP_Lot_Total_Market_Buy = 0; TP_Lot_Total_Market_Sell = 0; TP_Lot_Total_Pending_Stop_Buy = 0; TP_Lot_Total_Pending_Stop_Sell = 0; TP_Lot_Total_Pending_Limit_Buy = 0; TP_Lot_Total_Pending_Limit_Sell = 0; ArrayFree(TP_Tickets_Market_Buy); ArrayFree(TP_Tickets_Market_Sell); ArrayFree(TP_Tickets_Pending_Stop_Buy); ArrayFree(TP_Tickets_Pending_Stop_Sell); ArrayFree(TP_Tickets_Pending_Limit_Buy); ArrayFree(TP_Tickets_Pending_Limit_Sell); ArrayFree(TP_Prices_Market_Buy); ArrayFree(TP_Prices_Market_Sell); ArrayFree(TP_Prices_Market_Buy_SL); ArrayFree(TP_Prices_Market_Sell_SL); ArrayFree(TP_Prices_Market_Buy_TP); ArrayFree(TP_Prices_Market_Sell_TP); ArrayInitialize(TP_Tickets_Market_Buy,0); TP_Profit=0; TP_Profit_Buy = 0; TP_Profit_Sell = 0; for (int i=AP_Orders_Total-1; i >=0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==Symbol()) { TP_Orders_Total++; switch(OrderType()) { case OP_BUY: TP_Orders_Total_Market_Buy++; ArrayResize(TP_Lot_Market_Buy,TP_Orders_Total_Market_Buy); TP_Lot_Market_Buy[TP_Orders_Total_Market_Buy-1]=OrderLots(); TP_Lot_Total_Market_Buy = TP_Lot_Total_Market_Buy + OrderLots(); ArrayResize(TP_Prices_Market_Buy,TP_Orders_Total_Market_Buy); TP_Prices_Market_Buy[TP_Orders_Total_Market_Buy-1]=OrderOpenPrice(); ArrayResize(TP_Tickets_Market_Buy,TP_Orders_Total_Market_Buy); TP_Tickets_Market_Buy[TP_Orders_Total_Market_Buy-1]=OrderTicket(); ArrayResize(TP_Prices_Market_Buy_SL,TP_Orders_Total_Market_Buy); TP_Prices_Market_Buy_SL[TP_Orders_Total_Market_Buy-1]=OrderStopLoss(); ArrayResize(TP_Prices_Market_Buy_TP,TP_Orders_Total_Market_Buy); TP_Prices_Market_Buy_TP[TP_Orders_Total_Market_Buy-1]=OrderTakeProfit(); TP_Profit = TP_Profit + OrderProfit() + OrderCommission() + OrderSwap(); TP_Profit_Buy = TP_Profit_Buy + OrderProfit() + OrderCommission() + OrderSwap(); break; case OP_SELL: TP_Orders_Total_Market_Sell++; ArrayResize(TP_Lot_Market_Sell,TP_Orders_Total_Market_Sell); TP_Lot_Market_Sell[TP_Orders_Total_Market_Sell-1]=OrderLots(); TP_Lot_Total_Market_Sell = TP_Lot_Total_Market_Sell + OrderLots(); ArrayResize(TP_Prices_Market_Sell,TP_Orders_Total_Market_Sell); TP_Prices_Market_Sell[TP_Orders_Total_Market_Sell-1]=OrderOpenPrice(); ArrayResize(TP_Tickets_Market_Sell,TP_Orders_Total_Market_Sell); TP_Tickets_Market_Sell[TP_Orders_Total_Market_Sell-1]=OrderTicket(); ArrayResize(TP_Prices_Market_Sell_SL,TP_Orders_Total_Market_Sell); TP_Prices_Market_Sell_SL[TP_Orders_Total_Market_Sell-1]=OrderStopLoss(); ArrayResize(TP_Prices_Market_Sell_TP,TP_Orders_Total_Market_Sell); TP_Prices_Market_Sell_TP[TP_Orders_Total_Market_Sell-1]=OrderTakeProfit(); TP_Profit = TP_Profit + OrderProfit() + OrderCommission() + OrderSwap(); TP_Profit_Sell = TP_Profit_Sell + OrderProfit() + OrderCommission() + OrderSwap(); break; case OP_BUYLIMIT: TP_Orders_Total_Pending_Limit_Buy++; TP_Lot_Total_Pending_Limit_Buy = TP_Lot_Total_Pending_Limit_Buy + OrderLots(); ArrayResize(TP_Tickets_Pending_Limit_Buy,TP_Orders_Total_Pending_Limit_Buy); TP_Tickets_Pending_Limit_Buy[TP_Orders_Total_Pending_Limit_Buy-1]=OrderTicket(); break; case OP_BUYSTOP: TP_Orders_Total_Pending_Stop_Buy++; TP_Lot_Total_Pending_Stop_Buy = TP_Lot_Total_Pending_Stop_Buy + OrderLots(); ArrayResize(TP_Tickets_Pending_Stop_Buy,TP_Orders_Total_Pending_Stop_Buy); TP_Tickets_Pending_Stop_Buy[TP_Orders_Total_Pending_Stop_Buy-1]=OrderTicket(); break; case OP_SELLLIMIT: TP_Orders_Total_Pending_Limit_Sell++; TP_Lot_Total_Pending_Limit_Sell = TP_Lot_Total_Pending_Limit_Sell + OrderLots(); ArrayResize(TP_Tickets_Pending_Limit_Sell,TP_Orders_Total_Pending_Limit_Sell); TP_Tickets_Pending_Limit_Sell[TP_Orders_Total_Pending_Limit_Sell-1]=OrderTicket(); break; case OP_SELLSTOP: TP_Orders_Total_Pending_Stop_Sell++; TP_Lot_Total_Pending_Stop_Sell = TP_Lot_Total_Pending_Stop_Sell + OrderLots(); ArrayResize(TP_Tickets_Pending_Stop_Sell,TP_Orders_Total_Pending_Stop_Sell); TP_Tickets_Pending_Stop_Sell[TP_Orders_Total_Pending_Stop_Sell-1]=OrderTicket(); break; } //end switch TP_Lot_Total = TP_Lot_Total_Market_Buy + TP_Lot_Total_Market_Sell; if(TP_Lot_Total > TP_Lot_Total_Prev) TP_Lot_Total_Prev=TP_Lot_Total; } // if true else { //AP_Orders_Total++; if(OrderType()==OP_BUY || OrderType()==OP_SELL) AP_Lot_Total=AP_Lot_Total+OrderLots(); } } // end if } // end for if(ArrayRange(TP_Prices_Market_Sell,0) >1) ArraySort(TP_Prices_Market_Sell,WHOLE_ARRAY,0,MODE_ASCEND); if(ArrayRange(TP_Prices_Market_Buy,0) >1) ArraySort(TP_Prices_Market_Buy,WHOLE_ARRAY,0,MODE_DESCEND); if(ArrayRange(TP_Prices_Market_Buy_SL,0) >1) ArraySort(TP_Prices_Market_Buy_SL,WHOLE_ARRAY,0,MODE_DESCEND); if(ArrayRange(TP_Prices_Market_Buy_TP,0) >1) ArraySort(TP_Prices_Market_Buy_TP,WHOLE_ARRAY,0,MODE_DESCEND); if(ArrayRange(TP_Prices_Market_Sell_SL,0) >1) ArraySort(TP_Prices_Market_Sell_SL,WHOLE_ARRAY,0,MODE_ASCEND); if(ArrayRange(TP_Prices_Market_Sell_TP,0) >1) ArraySort(TP_Prices_Market_Sell_TP,WHOLE_ARRAY,0,MODE_ASCEND); if(ArrayRange(TP_Lot_Market_Buy,0) >1) ArraySort(TP_Lot_Market_Buy,WHOLE_ARRAY,0,MODE_DESCEND); if(ArrayRange(TP_Lot_Market_Sell,0)>1) ArraySort(TP_Lot_Market_Sell,WHOLE_ARRAY,0,MODE_DESCEND); //AP_Orders_Total = AP_Orders_Total + TP_Orders_Total; AP_Lot_Total = AP_Lot_Total + TP_Lot_Total; if(TP_Profit < TP_Rugi_Max) TP_Rugi_Max = TP_Profit; if(TP_Profit > TP_Profit_Max) TP_Profit_Max = TP_Profit; string TrendTXT, ConfirmTXT, TradeTXT; if(Trend == "DO") TrendTXT = "DOWN"; else if(Trend == "UP") TrendTXT = "UP"; else TrendTXT = "---"; if(Confirm == "DO") ConfirmTXT = "DOWN"; else if(Confirm == "UP") ConfirmTXT = "UP"; else ConfirmTXT = "---"; if(Trade == "DO") TradeTXT = "DOWN"; else if(Trade == "UP") TradeTXT = "UP"; else TradeTXT = "---"; Comment( "Total Order : " + IntegerToString(AP_Orders_Total,2) + " - " + DoubleToString(AP_Lot_Total,2) + " Lot", "\nOrder This Pair : " + IntegerToString(TP_Orders_Total_Market_Buy+TP_Orders_Total_Market_Sell) + " - " + DoubleToString(TP_Lot_Total,2) + " Lot", "\nOrder This Pair BUY : " + IntegerToString(TP_Orders_Total_Market_Buy) + " - " + DoubleToString(TP_Lot_Total_Market_Buy,2) + " Lot", "\nOrder This Pair SELL : " + IntegerToString(TP_Orders_Total_Market_Sell) + " - " + DoubleToString(TP_Lot_Total_Market_Sell,2) + " Lot", "\nOrder This Pair PENDING STOP BUY : " + IntegerToString(TP_Orders_Total_Pending_Stop_Buy) + " - " + DoubleToString(TP_Lot_Total_Pending_Stop_Buy,2) + " Lot" "\nOrder This Pair PENDING STOP SELL : " + IntegerToString(TP_Orders_Total_Pending_Stop_Sell) + " - " + DoubleToString(TP_Lot_Total_Pending_Stop_Sell,2) + " Lot" "\nBuy Profit / Sell Profit : " + DoubleToStr(TP_Profit_Buy,2) + " / " + DoubleToStr(TP_Profit_Sell,2), "\nEquity : " + DoubleToStr(AccountEquity(),2), " - Target Profit : ", "\nTrend / Confirmation / Trade : ", TrendTXT, " / " , ConfirmTXT, " / " , TradeTXT, "\nEquity : " + DoubleToStr(AccountEquity(),2)); } void TPProfit(int Direction) { int ndx = -1; bool SuksesOrder = false; InfoOrders(); if(Direction == OP_BUY) { ndx = ArraySize(TP_Tickets_Market_Buy); if(ndx>0) { ndx = ndx-1; while(ndx >= 0) { if(OrderSelect(TP_Tickets_Market_Buy[ndx], SELECT_BY_TICKET)==true) { if((OrderProfit()+OrderCommission()+OrderSwap()) >= 0) { SuksesOrder = OrderClose(TP_Tickets_Market_Buy[ndx],0.01,Bid,3,Red); if(SuksesOrder) { //--Print("SUKSES - ORDER CLOSE PROFIT BUY " + DoubleToStr(OrderProfit())); } else Print("GAGAL - ORDER CLOSE PROFIT BUY : ERROR CODE - " + IntegerToString(GetLastError())); } } ndx = ndx - 1; } } } else if(Direction == OP_SELL) { ndx = ArraySize(TP_Tickets_Market_Sell); //-- Print("TRYING TO CLOSE SELL PROFIT - POSSIBLE NUM OF OPEN SELL MARKET ORDER (ARRAY SIZE) : : " + IntegerToString(ndx)); if(ndx>0) { ndx = ndx-1; while(ndx >= 0) { if(OrderSelect(TP_Tickets_Market_Sell[ndx], SELECT_BY_TICKET)==true) { if((OrderProfit()+OrderCommission()+OrderSwap()) >= 0) { SuksesOrder = OrderClose(TP_Tickets_Market_Sell[ndx],0.01,Ask,3,Red); if(SuksesOrder) { //--Print("SUKSES - ORDER CLOSE PROFIT SELL " + DoubleToStr(OrderProfit())); } else Print("GAGAL - ORDER CLOSE PROFIT SELL : ERROR CODE - " + IntegerToString(GetLastError())); } } ndx = ndx - 1; } } } } int m15BarsOnChart = 0; int m30BarsOnChart = 0; int h1BarsOnChart=0; int h4BarsOnChart=0; int d1BarsOnChart=0; bool IsNewCandle(int TF) { bool RetVal=false; switch(TF) { case PERIOD_M15: if(iBars(Symbol(),TF) == m15BarsOnChart) RetVal = false; else { m15BarsOnChart=iBars(Symbol(),TF); RetVal = true; } break; case PERIOD_M30: if(iBars(Symbol(),TF) == m30BarsOnChart) RetVal = false; else { m30BarsOnChart=iBars(Symbol(),TF); RetVal = true; } break; case PERIOD_H1: if(iBars(Symbol(),TF) == h1BarsOnChart) RetVal = false; else { h1BarsOnChart=iBars(Symbol(),TF); RetVal = true; } break; case PERIOD_H4: if(iBars(Symbol(),TF) == h4BarsOnChart) RetVal = false; else { h4BarsOnChart=iBars(Symbol(),TF); RetVal = true; } break; case PERIOD_D1: if(iBars(Symbol(),TF) == d1BarsOnChart) RetVal = false; else { d1BarsOnChart=iBars(Symbol(),TF); RetVal = true; } break; } return(RetVal); } double LotCalc(double Price1, double Price2) { double Acct_Balance, Risk_Amount, Risk_PT, TickVal, TickSize, Vol; Acct_Balance = AccountBalance(); Risk_Amount = Acct_Balance * (Risk_In_Percent /100); TickVal = MarketInfo(Symbol(),MODE_TICKVALUE); TickSize = SymbolInfoDouble(Symbol(),SYMBOL_TRADE_TICK_SIZE); if(Price1 > Price2) Risk_PT = (Price1 - Price2)/Point; else Risk_PT = (Price2 - Price1)/Point; Vol = Risk_Amount /(Risk_PT*TickVal); if(Vol < MarketInfo(Symbol(),MODE_LOTSTEP)) Vol = 0; Vol = MathRound(Vol/MarketInfo(Symbol(),MODE_LOTSTEP))*MarketInfo(Symbol(),MODE_LOTSTEP); Print("Account Balance : ",DoubleToStr(Acct_Balance,2), " / ", "Risk Percentage : ", DoubleToStr(Risk_In_Percent,2), " / ", "Amount at Risk : ", DoubleToStr(Risk_Amount,2), " / ", "SL in Point : ", DoubleToStr(Risk_PT,2), " / ", "Volume : ", DoubleToStr(Vol,3)); return(Vol); } double StdPvtD1R3 = 0; double StdPvtD1R2 = 0; double StdPvtD1R1 = 0; double StdPvtD1PP = 0; double StdPvtD1S1 = 0; double StdPvtD1S2 = 0; double StdPvtD1S3 = 0; void InfoStdPivotD1Levels() { StdPvtD1PP = (iHigh(NULL,PERIOD_D1,1) + iLow(NULL,PERIOD_D1,1) + iClose(NULL,PERIOD_D1,1)) / 3; StdPvtD1R1 = (2*StdPvtD1PP)-iLow(NULL,PERIOD_D1,1); StdPvtD1S1 = (2*StdPvtD1PP)-iHigh(NULL,PERIOD_D1,1); StdPvtD1R2 = StdPvtD1PP + (iHigh(NULL,PERIOD_D1,1)-iLow(NULL,PERIOD_D1,1)); StdPvtD1S2 = StdPvtD1PP - (iHigh(NULL,PERIOD_D1,1)-iLow(NULL,PERIOD_D1,1)); StdPvtD1R3 = iHigh(NULL,PERIOD_D1,1) + (2 * (StdPvtD1PP - iLow(NULL,PERIOD_D1,1))); StdPvtD1S3 = iLow(NULL,PERIOD_D1,1) - (2 * (iHigh(NULL,PERIOD_D1,1) - StdPvtD1PP)); } void RedrawStdPivotD1Levels() { drawLine(StdPvtD1R3,"R3", Lime,0); drawText("DR 3",StdPvtD1R3,Lime); drawLine(StdPvtD1R2,"R2", Green,0); drawText("DR 2",StdPvtD1R2,Green); drawLine(StdPvtD1R1,"R1", DarkGreen,0); drawText("DR 1",StdPvtD1R1,DarkGreen); drawLine(StdPvtD1PP,"Daily Pivot",PvtLineColor,1); drawText("DP",StdPvtD1PP,PvtLabelColor); drawLine(StdPvtD1S1,"S1",Maroon,0); drawText("DS 1",StdPvtD1S1,Maroon); drawLine(StdPvtD1S2,"S2",Crimson,0); drawText("DS 2",StdPvtD1S2,Crimson); drawLine(StdPvtD1S3,"S3",Red,0); drawText("DS 3",StdPvtD1S3,Red); } void drawText(string ObjName,double Lvl,color Color) { if(ObjectFind(ObjName) != 0) { ObjectCreate(ObjName, OBJ_TEXT, 0, Time[10], Lvl); ObjectSetText(ObjName, ObjName, 6, "Arial", EMPTY); ObjectSet(ObjName, OBJPROP_COLOR, Color); } else { ObjectMove(ObjName, 0, Time[10], Lvl); } } void drawLine(double Lvl,string ObjName, color Col,int type) { if(ObjectFind(ObjName) == 0) { ObjectDelete(ObjName);//+------------------------------------------------------------------+ //| ATTS.mq4 | //| JTTW-Anas | //| http://www.fxmindtrixacademy.com | //+------------------------------------------------------------------+ //And Down/Down/Down instead of Do/Do/Do if it is possible please? //To learn more about the Advanced Trend Trading Strategy which this Expert Advisor was designed to take advantage of, go to www.fxmindtrixacademy.com //Write something like FXMindTriz Academy's Advanced Trend Trading Strategy Developed by Anas Abba and [Your Name] //Trend - 1 Hour //Confirm - 30 minutes //Trade - 15 Minutes //Buffer - 30 //Risk Per Trade - 1% //Reward Ratio - 3.0 //Account Balance - 10,000 //add spread to sl #property copyright "www.fxmindtrixacademy.com" #property link "www.fxmindtrixacademy.com" #property version "5.00" #property description "To learn more about the Advanced Trend Trading Strategy which this Expert Advisor was designed to take advantage of, go to www.fxmindtrixacademy.com" #property description " " #property description "@2019 - Anas Abba - Handjojo Santoso" #property strict //extern double FixLotSize = 0.03; //Lot Size input int ATTS_Trade_Hour_Start = 0; //Start Trading Hour input int ATTS_Trade_Hour_End = 24; //End Trading Hour input ENUM_TIMEFRAMES ATTS_SMA_Trend_TF = PERIOD_H1; //Trend Timeframe input ENUM_TIMEFRAMES ATTS_SMA_Confirm_TF = PERIOD_M30; //Confirmation Timeframe input ENUM_TIMEFRAMES ATTS_SMA_Trade_TF = PERIOD_M15; //Trade Timeframe input int ATTS_SMA_Period = 60; //Moving Average Period input double ATTS_Entry_Buffer = 30; //Entry Buffer (in Point) - distance between PO and Fractal input double Risk_In_Percent = 1; //Risk Percentage input double Reward_Ratio = 3; //Reward Ratio input bool Move_Initial_SL = false; //Move Initial SL input double ATTS_SL_Buffer = 30; //SL Buffer (in Point) - distance between SL and SMA input bool ATTS_Allow_Partially_Close = false; //Partially close on BEP level input double ATTS_Partially_Percent = 30; //Percent to close input bool AllowJumpToBEP = false; //Allow to jump to BEP level after X points profit input double JumpToBEPPoint = 500; //Jump after X points profit input bool AllowFractalTP = false; //TP on new opposite fractal input bool AllowCutSwitch = true; //Cut and Switch when opposite direction detected double ATTS_TPUSD = 0; //TP in USD (0 = Let's the profit run until get SL) : color PvtLineColor = White; color PvtLabelColor = White; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { return(INIT_SUCCEEDED); } void OnDeinit(const int reason) { } bool ATTS_Close_Above_SMA_Trade_Hi = false; bool ATTS_Close_Below_SMA_Trade_Lo = false; void OnTick() { //CheckProfitUSD(); InfoATTS(); if(Bid > ATTS_Price_Hi_Trend) Trend = "UP"; else if(Bid < ATTS_Price_Lo_Trend) Trend = "DO"; else Trend = "---"; if(Bid > ATTS_Price_Hi_Confirm) Confirm = "UP"; else if(Bid < ATTS_Price_Lo_Confirm) Confirm = "DO"; else Confirm = "---"; if(Bid > ATTS_Price_Hi_Trade) Trade = "UP"; else if(Bid < ATTS_Price_Lo_Trade) Trade = "DO"; else Trade = "---"; InfoOrders(); //Check infoorders lagi just in case cleanmarketorder if(AllowCutSwitch) { CheckCutSwitch(); } if(IsNewCandle(ATTS_SMA_Trade_TF)) { InfoATTS(); if(Bid > ATTS_Price_Hi_Trend) Trend = "UP"; else if(Bid < ATTS_Price_Lo_Trend) Trend = "DO"; else Trend = "---"; if(Bid > ATTS_Price_Hi_Confirm) Confirm = "UP"; else if(Bid < ATTS_Price_Lo_Confirm) Confirm = "DO"; else Confirm = "---"; if(Bid > ATTS_Price_Hi_Trade) Trade = "UP"; else if(Bid < ATTS_Price_Lo_Trade) Trade = "DO"; else Trade = "---"; if(iClose(Symbol(),ATTS_SMA_Trade_TF,1) > ATTS_Price_Hi_Trade) ATTS_Close_Above_SMA_Trade_Hi = true; else ATTS_Close_Above_SMA_Trade_Hi = false; if(iClose(Symbol(),ATTS_SMA_Trade_TF,1) < ATTS_Price_Lo_Trade) ATTS_Close_Below_SMA_Trade_Lo = true; else ATTS_Close_Below_SMA_Trade_Lo = false; ATTSMethod(); } } void CheckCutSwitch() { if(TP_Orders_Total_Market_Buy > 0 && TP_Orders_Total_Market_Sell > 0) { if(Trend == "DO") { bool Modified = false; Modified = OrderClose(TP_Tickets_Market_Buy[0],OrderLots(),Bid,3,clrNONE); if(Modified) Print("Order closed ..."); } if(Trend == "UP") { bool Modified = false; Modified = OrderClose(TP_Tickets_Market_Sell[0],OrderLots(),Ask,3,clrNONE); if(Modified) Print("Order closed ..."); } } } string Trend = ""; string Confirm = ""; string Trade = ""; bool JumpToBEPPointDone = false; bool PartiallyCloseDone = false; void ATTSMethod() { if(TP_Orders_Total_Market_Buy + TP_Orders_Total_Market_Sell == 0) // Jika Tidak Ada Open Posisi { PartiallyCloseDone = false; JumpToBEPPointDone = false; if(Trend == Confirm) { if(Trend == "UP") { if(Trade == "UP") { ATTSOpenPOBUY(); } else if(ATTS_Close_Below_SMA_Trade_Lo) CleanPendingOrder(100); } else if(Trend == "DO") { if(Trade == "DO") { ATTSOpenPOSELL(); } if(ATTS_Close_Above_SMA_Trade_Hi) CleanPendingOrder(100); } } else CleanPendingOrder(100); } else // Jika ada Open Posisi { if(TP_Orders_Total_Market_Buy > 0) { double SL = ATTS_Price_Lo_Trade - (ATTS_SL_Buffer*Point); if(OrderSelect(TP_Tickets_Market_Buy[0],SELECT_BY_TICKET,MODE_TRADES)) { if(SL < OrderStopLoss()) SL = OrderStopLoss(); if(Move_Initial_SL) { bool Modified = false; Modified = OrderModify(TP_Tickets_Market_Buy[0],OrderOpenPrice(),SL,OrderTakeProfit(),NULL,clrNONE); if(Modified) Print("SL modified ..."); } if(ATTS_Allow_Partially_Close && (ATTS_Price_Lo_Trade - (ATTS_SL_Buffer*Point)) >= OrderOpenPrice() && !PartiallyCloseDone) { double LotToClose = TP_Lot_Total_Market_Buy * (ATTS_Partially_Percent / 100); LotToClose = MathCeil(LotToClose / SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN)) * SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN) ; Print("Partially Close Buy Position ", DoubleToStr(LotToClose,3)); if(LotToClose > 0 && LotToClose < OrderLots()) { bool Modified = false; Modified = OrderClose(TP_Tickets_Market_Buy[0],LotToClose,Bid,3,clrNONE); if(Modified) PartiallyCloseDone = true; } } if(AllowJumpToBEP && !JumpToBEPPointDone && (Ask - OrderOpenPrice() >= JumpToBEPPoint*Point)) { SL = OrderOpenPrice() + (MarketInfo(Symbol(),MODE_SPREAD)*Point*2); bool Modified = false; Modified = OrderModify(TP_Tickets_Market_Buy[0],OrderOpenPrice(),SL,OrderTakeProfit(),NULL,clrNONE); if(Modified) JumpToBEPPointDone = true; } if(AllowFractalTP && ATTS_Price_Fractal_Up > Ask && OrderProfit() > 0) CleanMarketOrder(); if(Trend == "DO" && Confirm == "DO" && Trade == "DO" && AllowCutSwitch) { //xxx close buy if( TP_Orders_Total_Market_Sell > 0 || TP_Profit_Buy > 0) { bool Modified = false; Modified = OrderClose(TP_Tickets_Market_Buy[0],OrderLots(),Bid,3,clrNONE); if(Modified) Print("Order closed ..."); } if(TP_Orders_Total_Pending_Stop_Sell == 0) ATTSOpenPOSELL(); CleanPendingOrder(OP_BUYSTOP); } } else Print("NOT SELECTED"); } if(TP_Orders_Total_Market_Sell > 0) { double SL = ATTS_Price_Hi_Trade + (ATTS_SL_Buffer*Point); if(OrderSelect(TP_Tickets_Market_Sell[0],SELECT_BY_TICKET,MODE_TRADES)) { if(SL > OrderStopLoss()) SL = OrderStopLoss(); if(Move_Initial_SL) { bool Modified = false; Modified = OrderModify(TP_Tickets_Market_Sell[0],OrderOpenPrice(),SL,OrderTakeProfit(),NULL,clrNONE); if(Modified) Print("SL modified ..."); } if(ATTS_Allow_Partially_Close && (ATTS_Price_Hi_Trade + (ATTS_SL_Buffer*Point)) <= OrderOpenPrice() && !PartiallyCloseDone) { double LotToClose = TP_Lot_Total_Market_Sell * (ATTS_Partially_Percent / 100); LotToClose = MathCeil(LotToClose / SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN)) * SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN) ; Print("Partially Close Sell Position ", DoubleToStr(LotToClose,3)); if(LotToClose > 0 && LotToClose < OrderLots()) { bool Modified = false; Modified = OrderClose(TP_Tickets_Market_Sell[0],LotToClose,Ask,3,clrNONE); if(Modified) PartiallyCloseDone = true; } } if(AllowJumpToBEP && !JumpToBEPPointDone && (OrderOpenPrice() - Ask >= JumpToBEPPoint*Point)) { SL = OrderOpenPrice() - (MarketInfo(Symbol(),MODE_SPREAD)*Point*2); bool Modified = false; Modified = OrderModify(TP_Tickets_Market_Sell[0],OrderOpenPrice(),SL,OrderTakeProfit(),NULL,clrNONE); if(Modified) JumpToBEPPointDone = true; } if(AllowFractalTP && ATTS_Price_Fractal_Do < Bid && OrderProfit() > 0) CleanMarketOrder(); if(Trend == "UP" && Confirm == "UP" && Trade == "UP" && AllowCutSwitch) { //xxx close buy if(TP_Orders_Total_Market_Buy > 0 || TP_Profit_Sell > 0) { bool Modified = false; Modified = OrderClose(TP_Tickets_Market_Sell[0],OrderLots(),Ask,3,clrNONE); if(Modified) Print("Order closed ..."); } if(TP_Orders_Total_Pending_Stop_Buy == 0) ATTSOpenPOBUY(); CleanPendingOrder(OP_SELLSTOP); } } else Print("NOT SELECTED"); } } } void ATTSOpenPOBUY() { CleanPendingOrder(OP_SELLSTOP); double CheckPrice = (Bid + (MarketInfo(NULL,MODE_STOPLEVEL)*Point)); double POPrice = NormalizeDouble(ATTS_Price_Fractal_Up + (ATTS_Entry_Buffer * Point) + (MarketInfo(NULL,MODE_STOPLEVEL)*Point),Digits); double Lot_Size, SL, TP; Lot_Size = LotCalc(POPrice, ATTS_Price_Lo_Trade); SL = ATTS_Price_Lo_Trade - (ATTS_SL_Buffer*Point); TP = POPrice + ((POPrice - SL) * Reward_Ratio); if(TP_Orders_Total_Pending_Stop_Buy == 0 && Lot_Size > 0) { if(ATTS_Price_Fractal_Up >= CheckPrice) { if(Hour() >= ATTS_Trade_Hour_Start && Hour() <= ATTS_Trade_Hour_End) { OrderEntryATTS(OP_BUYSTOP,POPrice,Lot_Size,SL,TP); } } } else if(TP_Orders_Total_Pending_Stop_Buy > 0 && Lot_Size > 0) { if(OrderSelect(TP_Tickets_Pending_Stop_Buy[0],SELECT_BY_TICKET,MODE_TRADES)) { if((POPrice != NormalizeDouble(OrderOpenPrice(),Digits) || Lot_Size != OrderLots()) && ATTS_Price_Fractal_Up >= CheckPrice) { if(Hour() >= ATTS_Trade_Hour_Start && Hour() <= ATTS_Trade_Hour_End) { CleanPendingOrder(OP_BUYSTOP); OrderEntryATTS(OP_BUYSTOP,POPrice,Lot_Size,SL,TP); } else CleanPendingOrder(OP_BUYSTOP); } } } } void ATTSOpenPOSELL() { CleanPendingOrder(OP_BUYSTOP); double CheckPrice = (Ask - (MarketInfo(NULL,MODE_STOPLEVEL)*Point)); double POPrice = NormalizeDouble(ATTS_Price_Fractal_Do - (ATTS_Entry_Buffer * Point) - (MarketInfo(NULL,MODE_STOPLEVEL)*Point), Digits); double Lot_Size, SL, TP; Lot_Size = LotCalc(ATTS_Price_Hi_Trade, POPrice); SL = ATTS_Price_Hi_Trade + (ATTS_SL_Buffer*Point); TP = POPrice - ((SL - POPrice) * Reward_Ratio); if(TP_Orders_Total_Pending_Stop_Sell == 0 && Lot_Size > 0) { if(Hour() >= ATTS_Trade_Hour_Start && Hour() <= ATTS_Trade_Hour_End) { if(ATTS_Price_Fractal_Do <= CheckPrice) OrderEntryATTS(OP_SELLSTOP,POPrice,Lot_Size,SL,TP); } } else if(TP_Orders_Total_Pending_Stop_Sell > 0 && Lot_Size > 0) { if(OrderSelect(TP_Tickets_Pending_Stop_Sell[0],SELECT_BY_TICKET,MODE_TRADES)) { if((POPrice != NormalizeDouble(OrderOpenPrice(),Digits) || Lot_Size != OrderLots()) && ATTS_Price_Fractal_Do <= CheckPrice) { if(Hour() >= ATTS_Trade_Hour_Start && Hour() <= ATTS_Trade_Hour_End) { CleanPendingOrder(OP_SELLSTOP); OrderEntryATTS(OP_SELLSTOP,POPrice,Lot_Size,SL,TP); } else CleanPendingOrder(OP_SELLSTOP); } } } } double ATTS_Price_Hi_Trend = 0; double ATTS_Price_Lo_Trend = 0; double ATTS_Price_Hi_Confirm = 0; double ATTS_Price_Lo_Confirm = 0; double ATTS_Price_Hi_Trade = 0; double ATTS_Price_Lo_Trade = 0; double ATTS_Price_Fractal_Up = 0; double ATTS_Price_Fractal_Do = 0; void InfoATTS() { ATTS_Price_Hi_Trend = iMA(NULL,ATTS_SMA_Trend_TF,ATTS_SMA_Period,0,MODE_SMA,PRICE_HIGH,1); ATTS_Price_Lo_Trend = iMA(NULL,ATTS_SMA_Trend_TF,ATTS_SMA_Period,0,MODE_SMA,PRICE_LOW,1); ATTS_Price_Hi_Confirm = iMA(NULL,ATTS_SMA_Confirm_TF,ATTS_SMA_Period,0,MODE_SMA,PRICE_HIGH,1); ATTS_Price_Lo_Confirm = iMA(NULL,ATTS_SMA_Confirm_TF,ATTS_SMA_Period,0,MODE_SMA,PRICE_LOW,1); ATTS_Price_Hi_Trade = iMA(NULL,ATTS_SMA_Trade_TF,ATTS_SMA_Period,0,MODE_SMA,PRICE_HIGH,1); ATTS_Price_Lo_Trade = iMA(NULL,ATTS_SMA_Trade_TF,ATTS_SMA_Period,0,MODE_SMA,PRICE_LOW,1); int cntr = 0; do { double NilaiFractal = iFractals(NULL,ATTS_SMA_Trade_TF,MODE_UPPER,cntr); if(NilaiFractal > 0 && NilaiFractal != NULL) { ATTS_Price_Fractal_Up = iFractals(NULL,ATTS_SMA_Trade_TF,MODE_UPPER,cntr); cntr = 0; break; } cntr++; } while (true); do { double NilaiFractal = iFractals(NULL,ATTS_SMA_Trade_TF,MODE_LOWER,cntr); if(NilaiFractal > 0 && NilaiFractal != NULL) { ATTS_Price_Fractal_Do = iFractals(NULL,ATTS_SMA_Trade_TF,MODE_LOWER,cntr); cntr = 0; break; } cntr++; } while(true); } void CheckProfitUSD() { InfoOrders(); if(ATTS_TPUSD > 0 && TP_Profit >= ATTS_TPUSD) { CleanMarketOrder(); } } void CleanMarketOrder() { for (int b=OrdersTotal()-1;b>=0;b--) { if(OrderSelect(b,SELECT_BY_POS,MODE_TRADES)) if(OrderSymbol()==Symbol()) { if(OrderType()==OP_BUY) { if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,clrRed)) Print("Fail to clean BUY orders ..."); } else if(OrderType()==OP_SELL) { if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,clrRed)) Print("Fail to clean SELL orders ..."); } } } TP_Lot_Total=0; TP_Lot_Total_Prev=0; ArrayFree(TP_Lot_Market_Buy); ArrayFree(TP_Lot_Market_Sell); CleanPendingOrder(100); } void CleanPendingOrder(int Direction) { if(Direction == OP_SELLSTOP || Direction == 100) { for(int b=ArraySize(TP_Tickets_Pending_Stop_Sell)-1;b>=0;b--) { if(TP_Tickets_Pending_Stop_Sell[b]>0) if(!OrderDelete(TP_Tickets_Pending_Stop_Sell[b])) Print("Fail to clean sell pending orders ..."); } } if(Direction == OP_BUYSTOP || Direction == 100) { for(int b=ArraySize(TP_Tickets_Pending_Stop_Buy)-1;b>=0;b--) { if(TP_Tickets_Pending_Stop_Buy[b]>0) if(!OrderDelete(TP_Tickets_Pending_Stop_Buy[b])) Print("Fail to clean buy pending orders ..."); } } } void OrderEntryATTS(int Direction, double Price, double NumLot, double SL, double TP) { int ticket = 0 ; switch(Direction) { case OP_BUYSTOP : Print("Price BUY STOP / SL / TP : ", Price, " / " , SL, " / ", TP, " --- ", ATTS_Entry_Buffer*Point); ticket=OrderSend(Symbol(),OP_BUYSTOP,NumLot,Price,3,SL,TP,"ATTS",NULL,0,clrGreen); if(ticket<0) { Print("OrderSend BUYSTOP failed with error #",GetLastError()); } break; case OP_SELLSTOP : Print("Price SELL STOP / SL / TP : ", Price, " / " , SL, " / ", TP," --- ", ATTS_Entry_Buffer*Point); ticket=OrderSend(Symbol(),OP_SELLSTOP,NumLot,Price,3,SL,TP,"ATTS",NULL,0,clrGreen); if(ticket<0) { Print("OrderSend SELLSTOP failed with error #",GetLastError()); } break; } } //GLOBAL VARIABLE int AP_Orders_Total = 0; double AP_Lot_Total = 0; int TP_Tickets_Market_Buy[]; int TP_Tickets_Market_Sell[]; int TP_Tickets_Pending_Stop_Buy[]; int TP_Tickets_Pending_Stop_Sell[]; int TP_Tickets_Pending_Limit_Buy[]; int TP_Tickets_Pending_Limit_Sell[]; int TP_Orders_Total; int TP_Orders_Total_Market_Buy; int TP_Orders_Total_Market_Sell; int TP_Orders_Total_Pending_Stop_Buy; int TP_Orders_Total_Pending_Stop_Sell; int TP_Orders_Total_Pending_Limit_Buy; int TP_Orders_Total_Pending_Limit_Sell; double TP_Lot_Total = 0; double TP_Lot_Total_Prev = 0; double TP_Lot_Total_Market_Buy; double TP_Lot_Total_Market_Sell; double TP_Lot_Total_Pending_Stop_Buy; double TP_Lot_Total_Pending_Stop_Sell; double TP_Lot_Total_Pending_Limit_Buy; double TP_Lot_Total_Pending_Limit_Sell; double TP_Prices_Market_Buy_SL[]; double TP_Prices_Market_Buy_TP[]; double TP_Prices_Market_Sell_SL[]; double TP_Prices_Market_Sell_TP[]; double TP_Prices_Market_Buy[]; double TP_Prices_Market_Sell[]; double TP_Lot_Market_Buy[]; double TP_Lot_Market_Sell[]; string CurrPricePosition; double TP_Profit=0; double TP_Profit_Sell=0; double TP_Profit_Buy=0; double TP_Profit_Max = 0; double TP_Rugi_Max = 0; void InfoOrders() { AP_Orders_Total = OrdersTotal(); AP_Lot_Total = 0; //AllPairs_Lot TP_Orders_Total = 0; TP_Orders_Total_Market_Buy = 0; TP_Orders_Total_Market_Sell = 0; TP_Orders_Total_Pending_Stop_Buy = 0; TP_Orders_Total_Pending_Stop_Sell = 0; TP_Orders_Total_Pending_Limit_Buy=0; TP_Orders_Total_Pending_Limit_Sell=0; TP_Lot_Total = 0; TP_Lot_Total_Market_Buy = 0; TP_Lot_Total_Market_Sell = 0; TP_Lot_Total_Pending_Stop_Buy = 0; TP_Lot_Total_Pending_Stop_Sell = 0; TP_Lot_Total_Pending_Limit_Buy = 0; TP_Lot_Total_Pending_Limit_Sell = 0; ArrayFree(TP_Tickets_Market_Buy); ArrayFree(TP_Tickets_Market_Sell); ArrayFree(TP_Tickets_Pending_Stop_Buy); ArrayFree(TP_Tickets_Pending_Stop_Sell); ArrayFree(TP_Tickets_Pending_Limit_Buy); ArrayFree(TP_Tickets_Pending_Limit_Sell); ArrayFree(TP_Prices_Market_Buy); ArrayFree(TP_Prices_Market_Sell); ArrayFree(TP_Prices_Market_Buy_SL); ArrayFree(TP_Prices_Market_Sell_SL); ArrayFree(TP_Prices_Market_Buy_TP); ArrayFree(TP_Prices_Market_Sell_TP); ArrayInitialize(TP_Tickets_Market_Buy,0); TP_Profit=0; TP_Profit_Buy = 0; TP_Profit_Sell = 0; for (int i=AP_Orders_Total-1; i >=0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==Symbol()) { TP_Orders_Total++; switch(OrderType()) { case OP_BUY: TP_Orders_Total_Market_Buy++; ArrayResize(TP_Lot_Market_Buy,TP_Orders_Total_Market_Buy); TP_Lot_Market_Buy[TP_Orders_Total_Market_Buy-1]=OrderLots(); TP_Lot_Total_Market_Buy = TP_Lot_Total_Market_Buy + OrderLots(); ArrayResize(TP_Prices_Market_Buy,TP_Orders_Total_Market_Buy); TP_Prices_Market_Buy[TP_Orders_Total_Market_Buy-1]=OrderOpenPrice(); ArrayResize(TP_Tickets_Market_Buy,TP_Orders_Total_Market_Buy); TP_Tickets_Market_Buy[TP_Orders_Total_Market_Buy-1]=OrderTicket(); ArrayResize(TP_Prices_Market_Buy_SL,TP_Orders_Total_Market_Buy); TP_Prices_Market_Buy_SL[TP_Orders_Total_Market_Buy-1]=OrderStopLoss(); ArrayResize(TP_Prices_Market_Buy_TP,TP_Orders_Total_Market_Buy); TP_Prices_Market_Buy_TP[TP_Orders_Total_Market_Buy-1]=OrderTakeProfit(); TP_Profit = TP_Profit + OrderProfit() + OrderCommission() + OrderSwap(); TP_Profit_Buy = TP_Profit_Buy + OrderProfit() + OrderCommission() + OrderSwap(); break; case OP_SELL: TP_Orders_Total_Market_Sell++; ArrayResize(TP_Lot_Market_Sell,TP_Orders_Total_Market_Sell); TP_Lot_Market_Sell[TP_Orders_Total_Market_Sell-1]=OrderLots(); TP_Lot_Total_Market_Sell = TP_Lot_Total_Market_Sell + OrderLots(); ArrayResize(TP_Prices_Market_Sell,TP_Orders_Total_Market_Sell); TP_Prices_Market_Sell[TP_Orders_Total_Market_Sell-1]=OrderOpenPrice(); ArrayResize(TP_Tickets_Market_Sell,TP_Orders_Total_Market_Sell); TP_Tickets_Market_Sell[TP_Orders_Total_Market_Sell-1]=OrderTicket(); ArrayResize(TP_Prices_Market_Sell_SL,TP_Orders_Total_Market_Sell); TP_Prices_Market_Sell_SL[TP_Orders_Total_Market_Sell-1]=OrderStopLoss(); ArrayResize(TP_Prices_Market_Sell_TP,TP_Orders_Total_Market_Sell); TP_Prices_Market_Sell_TP[TP_Orders_Total_Market_Sell-1]=OrderTakeProfit(); TP_Profit = TP_Profit + OrderProfit() + OrderCommission() + OrderSwap(); TP_Profit_Sell = TP_Profit_Sell + OrderProfit() + OrderCommission() + OrderSwap(); break; case OP_BUYLIMIT: TP_Orders_Total_Pending_Limit_Buy++; TP_Lot_Total_Pending_Limit_Buy = TP_Lot_Total_Pending_Limit_Buy + OrderLots(); ArrayResize(TP_Tickets_Pending_Limit_Buy,TP_Orders_Total_Pending_Limit_Buy); TP_Tickets_Pending_Limit_Buy[TP_Orders_Total_Pending_Limit_Buy-1]=OrderTicket(); break; case OP_BUYSTOP: TP_Orders_Total_Pending_Stop_Buy++; TP_Lot_Total_Pending_Stop_Buy = TP_Lot_Total_Pending_Stop_Buy + OrderLots(); ArrayResize(TP_Tickets_Pending_Stop_Buy,TP_Orders_Total_Pending_Stop_Buy); TP_Tickets_Pending_Stop_Buy[TP_Orders_Total_Pending_Stop_Buy-1]=OrderTicket(); break; case OP_SELLLIMIT: TP_Orders_Total_Pending_Limit_Sell++; TP_Lot_Total_Pending_Limit_Sell = TP_Lot_Total_Pending_Limit_Sell + OrderLots(); ArrayResize(TP_Tickets_Pending_Limit_Sell,TP_Orders_Total_Pending_Limit_Sell); TP_Tickets_Pending_Limit_Sell[TP_Orders_Total_Pending_Limit_Sell-1]=OrderTicket(); break; case OP_SELLSTOP: TP_Orders_Total_Pending_Stop_Sell++; TP_Lot_Total_Pending_Stop_Sell = TP_Lot_Total_Pending_Stop_Sell + OrderLots(); ArrayResize(TP_Tickets_Pending_Stop_Sell,TP_Orders_Total_Pending_Stop_Sell); TP_Tickets_Pending_Stop_Sell[TP_Orders_Total_Pending_Stop_Sell-1]=OrderTicket(); break; } //end switch TP_Lot_Total = TP_Lot_Total_Market_Buy + TP_Lot_Total_Market_Sell; if(TP_Lot_Total > TP_Lot_Total_Prev) TP_Lot_Total_Prev=TP_Lot_Total; } // if true else { //AP_Orders_Total++; if(OrderType()==OP_BUY || OrderType()==OP_SELL) AP_Lot_Total=AP_Lot_Total+OrderLots(); } } // end if } // end for if(ArrayRange(TP_Prices_Market_Sell,0) >1) ArraySort(TP_Prices_Market_Sell,WHOLE_ARRAY,0,MODE_ASCEND); if(ArrayRange(TP_Prices_Market_Buy,0) >1) ArraySort(TP_Prices_Market_Buy,WHOLE_ARRAY,0,MODE_DESCEND); if(ArrayRange(TP_Prices_Market_Buy_SL,0) >1) ArraySort(TP_Prices_Market_Buy_SL,WHOLE_ARRAY,0,MODE_DESCEND); if(ArrayRange(TP_Prices_Market_Buy_TP,0) >1) ArraySort(TP_Prices_Market_Buy_TP,WHOLE_ARRAY,0,MODE_DESCEND); if(ArrayRange(TP_Prices_Market_Sell_SL,0) >1) ArraySort(TP_Prices_Market_Sell_SL,WHOLE_ARRAY,0,MODE_ASCEND); if(ArrayRange(TP_Prices_Market_Sell_TP,0) >1) ArraySort(TP_Prices_Market_Sell_TP,WHOLE_ARRAY,0,MODE_ASCEND); if(ArrayRange(TP_Lot_Market_Buy,0) >1) ArraySort(TP_Lot_Market_Buy,WHOLE_ARRAY,0,MODE_DESCEND); if(ArrayRange(TP_Lot_Market_Sell,0)>1) ArraySort(TP_Lot_Market_Sell,WHOLE_ARRAY,0,MODE_DESCEND); //AP_Orders_Total = AP_Orders_Total + TP_Orders_Total; AP_Lot_Total = AP_Lot_Total + TP_Lot_Total; if(TP_Profit < TP_Rugi_Max) TP_Rugi_Max = TP_Profit; if(TP_Profit > TP_Profit_Max) TP_Profit_Max = TP_Profit; string TrendTXT, ConfirmTXT, TradeTXT; if(Trend == "DO") TrendTXT = "DOWN"; else if(Trend == "UP") TrendTXT = "UP"; else TrendTXT = "---"; if(Confirm == "DO") ConfirmTXT = "DOWN"; else if(Confirm == "UP") ConfirmTXT = "UP"; else ConfirmTXT = "---"; if(Trade == "DO") TradeTXT = "DOWN"; else if(Trade == "UP") TradeTXT = "UP"; else TradeTXT = "---"; Comment( "Total Order : " + IntegerToString(AP_Orders_Total,2) + " - " + DoubleToString(AP_Lot_Total,2) + " Lot", "\nOrder This Pair : " + IntegerToString(TP_Orders_Total_Market_Buy+TP_Orders_Total_Market_Sell) + " - " + DoubleToString(TP_Lot_Total,2) + " Lot", "\nOrder This Pair BUY : " + IntegerToString(TP_Orders_Total_Market_Buy) + " - " + DoubleToString(TP_Lot_Total_Market_Buy,2) + " Lot", "\nOrder This Pair SELL : " + IntegerToString(TP_Orders_Total_Market_Sell) + " - " + DoubleToString(TP_Lot_Total_Market_Sell,2) + " Lot", "\nOrder This Pair PENDING STOP BUY : " + IntegerToString(TP_Orders_Total_Pending_Stop_Buy) + " - " + DoubleToString(TP_Lot_Total_Pending_Stop_Buy,2) + " Lot" "\nOrder This Pair PENDING STOP SELL : " + IntegerToString(TP_Orders_Total_Pending_Stop_Sell) + " - " + DoubleToString(TP_Lot_Total_Pending_Stop_Sell,2) + " Lot" "\nBuy Profit / Sell Profit : " + DoubleToStr(TP_Profit_Buy,2) + " / " + DoubleToStr(TP_Profit_Sell,2), "\nEquity : " + DoubleToStr(AccountEquity(),2), " - Target Profit : ", "\nTrend / Confirmation / Trade : ", TrendTXT, " / " , ConfirmTXT, " / " , TradeTXT, "\nEquity : " + DoubleToStr(AccountEquity(),2)); } void TPProfit(int Direction) { int ndx = -1; bool SuksesOrder = false; InfoOrders(); if(Direction == OP_BUY) { ndx = ArraySize(TP_Tickets_Market_Buy); if(ndx>0) { ndx = ndx-1; while(ndx >= 0) { if(OrderSelect(TP_Tickets_Market_Buy[ndx], SELECT_BY_TICKET)==true) { if((OrderProfit()+OrderCommission()+OrderSwap()) >= 0) { SuksesOrder = OrderClose(TP_Tickets_Market_Buy[ndx],0.01,Bid,3,Red); if(SuksesOrder) { //--Print("SUKSES - ORDER CLOSE PROFIT BUY " + DoubleToStr(OrderProfit())); } else Print("GAGAL - ORDER CLOSE PROFIT BUY : ERROR CODE - " + IntegerToString(GetLastError())); } } ndx = ndx - 1; } } } else if(Direction == OP_SELL) { ndx = ArraySize(TP_Tickets_Market_Sell); //-- Print("TRYING TO CLOSE SELL PROFIT - POSSIBLE NUM OF OPEN SELL MARKET ORDER (ARRAY SIZE) : : " + IntegerToString(ndx)); if(ndx>0) { ndx = ndx-1; while(ndx >= 0) { if(OrderSelect(TP_Tickets_Market_Sell[ndx], SELECT_BY_TICKET)==true) { if((OrderProfit()+OrderCommission()+OrderSwap()) >= 0) { SuksesOrder = OrderClose(TP_Tickets_Market_Sell[ndx],0.01,Ask,3,Red); if(SuksesOrder) { //--Print("SUKSES - ORDER CLOSE PROFIT SELL " + DoubleToStr(OrderProfit())); } else Print("GAGAL - ORDER CLOSE PROFIT SELL : ERROR CODE - " + IntegerToString(GetLastError())); } } ndx = ndx - 1; } } } } int m15BarsOnChart = 0; int m30BarsOnChart = 0; int h1BarsOnChart=0; int h4BarsOnChart=0; int d1BarsOnChart=0; bool IsNewCandle(int TF) { bool RetVal=false; switch(TF) { case PERIOD_M15: if(iBars(Symbol(),TF) == m15BarsOnChart) RetVal = false; else { m15BarsOnChart=iBars(Symbol(),TF); RetVal = true; } break; case PERIOD_M30: if(iBars(Symbol(),TF) == m30BarsOnChart) RetVal = false; else { m30BarsOnChart=iBars(Symbol(),TF); RetVal = true; } break; case PERIOD_H1: if(iBars(Symbol(),TF) == h1BarsOnChart) RetVal = false; else { h1BarsOnChart=iBars(Symbol(),TF); RetVal = true; } break; case PERIOD_H4: if(iBars(Symbol(),TF) == h4BarsOnChart) RetVal = false; else { h4BarsOnChart=iBars(Symbol(),TF); RetVal = true; } break; case PERIOD_D1: if(iBars(Symbol(),TF) == d1BarsOnChart) RetVal = false; else { d1BarsOnChart=iBars(Symbol(),TF); RetVal = true; } break; } return(RetVal); } double LotCalc(double Price1, double Price2) { double Acct_Balance, Risk_Amount, Risk_PT, TickVal, TickSize, Vol; Acct_Balance = AccountBalance(); Risk_Amount = Acct_Balance * (Risk_In_Percent /100); TickVal = MarketInfo(Symbol(),MODE_TICKVALUE); TickSize = SymbolInfoDouble(Symbol(),SYMBOL_TRADE_TICK_SIZE); if(Price1 > Price2) Risk_PT = (Price1 - Price2)/Point; else Risk_PT = (Price2 - Price1)/Point; Vol = Risk_Amount /(Risk_PT*TickVal); if(Vol < MarketInfo(Symbol(),MODE_LOTSTEP)) Vol = 0; Vol = MathRound(Vol/MarketInfo(Symbol(),MODE_LOTSTEP))*MarketInfo(Symbol(),MODE_LOTSTEP); Print("Account Balance : ",DoubleToStr(Acct_Balance,2), " / ", "Risk Percentage : ", DoubleToStr(Risk_In_Percent,2), " / ", "Amount at Risk : ", DoubleToStr(Risk_Amount,2), " / ", "SL in Point : ", DoubleToStr(Risk_PT,2), " / ", "Volume : ", DoubleToStr(Vol,3)); return(Vol); } double StdPvtD1R3 = 0; double StdPvtD1R2 = 0; double StdPvtD1R1 = 0; double StdPvtD1PP = 0; double StdPvtD1S1 = 0; double StdPvtD1S2 = 0; double StdPvtD1S3 = 0; void InfoStdPivotD1Levels() { StdPvtD1PP = (iHigh(NULL,PERIOD_D1,1) + iLow(NULL,PERIOD_D1,1) + iClose(NULL,PERIOD_D1,1)) / 3; StdPvtD1R1 = (2*StdPvtD1PP)-iLow(NULL,PERIOD_D1,1); StdPvtD1S1 = (2*StdPvtD1PP)-iHigh(NULL,PERIOD_D1,1); StdPvtD1R2 = StdPvtD1PP + (iHigh(NULL,PERIOD_D1,1)-iLow(NULL,PERIOD_D1,1)); StdPvtD1S2 = StdPvtD1PP - (iHigh(NULL,PERIOD_D1,1)-iLow(NULL,PERIOD_D1,1)); StdPvtD1R3 = iHigh(NULL,PERIOD_D1,1) + (2 * (StdPvtD1PP - iLow(NULL,PERIOD_D1,1))); StdPvtD1S3 = iLow(NULL,PERIOD_D1,1) - (2 * (iHigh(NULL,PERIOD_D1,1) - StdPvtD1PP)); } void RedrawStdPivotD1Levels() { drawLine(StdPvtD1R3,"R3", Lime,0); drawText("DR 3",StdPvtD1R3,Lime); drawLine(StdPvtD1R2,"R2", Green,0); drawText("DR 2",StdPvtD1R2,Green); drawLine(StdPvtD1R1,"R1", DarkGreen,0); drawText("DR 1",StdPvtD1R1,DarkGreen); drawLine(StdPvtD1PP,"Daily Pivot",PvtLineColor,1); drawText("DP",StdPvtD1PP,PvtLabelColor); drawLine(StdPvtD1S1,"S1",Maroon,0); drawText("DS 1",StdPvtD1S1,Maroon); drawLine(StdPvtD1S2,"S2",Crimson,0); drawText("DS 2",StdPvtD1S2,Crimson); drawLine(StdPvtD1S3,"S3",Red,0); drawText("DS 3",StdPvtD1S3,Red); } void drawText(string ObjName,double Lvl,color Color) { if(ObjectFind(ObjName) != 0) { ObjectCreate(ObjName, OBJ_TEXT, 0, Time[10], Lvl); ObjectSetText(ObjName, ObjName, 6, "Arial", EMPTY); ObjectSet(ObjName, OBJPROP_COLOR, Color); } else { ObjectMove(ObjName, 0, Time[10], Lvl); } } void drawLine(double Lvl,string ObjName, color Col,int type) { if(ObjectFind(ObjName) == 0) { ObjectDelete(ObjName); } ObjectCreate(ObjName, OBJ_HLINE, 0, Time[0], Lvl,Time[0],Lvl); if(type == 1) ObjectSet(ObjName, OBJPROP_STYLE, STYLE_SOLID); else ObjectSet(ObjName, OBJPROP_STYLE, STYLE_DOT); ObjectSet(ObjName, OBJPROP_COLOR, Col); ObjectSet(ObjName,OBJPROP_WIDTH,1); } } ObjectCreate(ObjName, OBJ_HLINE, 0, Time[0], Lvl,Time[0],Lvl); if(type == 1) ObjectSet(ObjName, OBJPROP_STYLE, STYLE_SOLID); else ObjectSet(ObjName, OBJPROP_STYLE, STYLE_DOT); ObjectSet(ObjName, OBJPROP_COLOR, Col); ObjectSet(ObjName,OBJPROP_WIDTH,1); }