//////////////////////////////////////////// // ScratchyMokuLite // Mark Chaudhary (markdshark) // mark@phluffynet.com //////////////////////////////////////////// #property copyright "markdshark" #property link "http://caveceteris.com" //////////////////////////////////////////// #import "stdlib.ex4" string ErrorDescription(int error_code); #import // Standard externally configurable variables extern double externLot=0.1; //Custom external int tenkanPeriod = 7; int kijunPeriod = 22; int senkouPeriod = 44; int tkCross; // Standard internal variables int magic=1111; double atr,lot,stopLoss, takeProfit, currentStopLoss, currentTakeProfit; bool stopsSetFlag; // Custom internal variables double tenkan, tenkan1, kijun, kijun1, chinkou, upKumo, downKumo; datetime currBar; /////////////////// // Start /////////////////// int start(){ trade(); for (int i=0; i kijun && tenkan1 <= kijun1) tkCross=1; // t & k bullish cross if (tenkan < kijun && tenkan1 >= kijun1) tkCross=0; // t & k bearish cross if (buyCondition() && OrdersTotal() < 1){ if (buy()>0) return(1); } else if (sellCondition() && OrdersTotal() < 1){ if (sell()>0) return(1); } else return (0); } bool buyCondition(){ if( tkCross == 1 && Close[1] > upKumo && Close[1] > downKumo // and we closed above the cloud ) return (true); else return (false); } bool sellCondition(){ if( tkCross == 0 && Close[1] < upKumo && Close[1] < downKumo // and we closed below the cloud ) return (true); else return (false); } int buy(){ bool tradeFlag=false; lot=externLot; if (OrderSend(Symbol(),OP_BUY,externLot,Ask,0,0,0,"SCRATCHYMOKU",magic)<1) { tradeErrorAlert(GetLastError()); } else tradeFlag=true; if (tradeFlag) return(1); else return(0); } int sell(){ bool tradeFlag=false; if (OrderSend(Symbol(),OP_SELL,externLot,Bid,0,0,0,"SCRATCHYMOKU",magic)<1) { tradeErrorAlert(GetLastError()); } else tradeFlag=true; if (tradeFlag) return(1); else return(0); } /////////////////////////////////////////////////////////////////////////////////////// // CLOSE TRADES /////////////////////////////////////////////////////////////////////////////////////// void closeTradesIfNeeded(){ if (OrderType()==OP_BUY && OrderComment()== "SCRATCHYMOKU"){ if(buyCloseCondition() ) { if( OrderClose(OrderTicket(),OrderLots(),Bid,0,CLR_NONE) ) return (1); else return (0); } }else if (OrderType()==OP_SELL && OrderComment()== "SCRATCHYMOKU"){ if (sellCloseCondition() ) { if( OrderClose(OrderTicket(),OrderLots(),Ask,0,CLR_NONE) )return (1); else return (0); } } } bool buyCloseCondition(){ if ( tkCross == 0 ){ Alert("BUY CLOSE CONDITION"); return(true); } else return (false); } bool sellCloseCondition(){ if ( tkCross == 1 ){ Alert("SELL CLOSE CONDITION"); return(true); } else return (false); } ////////////////////////////////////////////////////////////////////////////// // Establish TP & Sl ///////////////////////////////////////////////////////////////////////////// void establishTpSl(int i){ if(OrderType()== OP_BUY && !stopsSetFlag){ double buyStop = MathMin(upKumo+atr, downKumo+atr); if(OrderModify(OrderTicket(),OrderOpenPrice(),buyStop,0,0,Yellow)>0) { currentStopLoss = downKumo+atr; } else tradeErrorAlert(GetLastError()); if (i==OrdersTotal()-1){ stopsSetFlag = true; Alert("FIRST STOPS SET. Current StopLoss is ",currentStopLoss," TakeProfit is ",currentTakeProfit); } } else if (OrderType()== OP_SELL && !stopsSetFlag){ double sellStop = MathMax(upKumo-atr, downKumo-atr); if(OrderModify(OrderTicket(),OrderOpenPrice(),sellStop,0,0,Yellow)>0) { currentStopLoss = downKumo-atr; } else tradeErrorAlert(GetLastError()); if (i==OrdersTotal()-1){ stopsSetFlag = true; Alert("FIRST STOPS SET. Current StopLoss is ",currentStopLoss," TakeProfit is ",currentTakeProfit); } } } void tradeErrorAlert(int errorCode){ Alert("TRADE ERROR! TRADE ERROR! TRADE ERROR! >>>>>>>>>>>>>>>>",ErrorDescription(errorCode)); }