{ UT_TRD PSS Universal Trend Detection System - Automated Trading Strategy (C)Copyright, 2009, B.Eichberger from Professional Software Solutions, pss@pobox.com This program remains the exclusive property of B. EICHBERGER and may not be sold, used, copied, displayed or modified without the written consent of B. EICHBERGER. YOU ASSUME FULL LIABILITY FOR ALL TRADING RISKS AND OUTCOMES! PSS OR ITS EMPLOYEES AND ASSOCIATES ARE NOT RESPONSIBLE FOR ANY LOSS OR PROFIT! } Inputs: UTScope(40), UTSmooth(1), UTRecent(2), UTStep(80), UTCloseFac(100), EntryGrade(2), ExitAge(3), TargetAmount(0), StopAmount(0), TrailAmount(0), ExitDayEnd(0), txtID("TRD");; Var: txtDiag("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"), txtID_(Symbol + "_TRADE_" + txtID), nGrade(0), nTrendAge(0), ret(0); Array: double arrVal[100](0); {====== UT MODULE INTERFACE =========================================} DefineDLLFunc: "PSS_UTC.DLL", float , "PSS_UTC", LPSTR, LPDOUBLE, LPSTR; arrVal[0] = Date data1; arrVal[1] = Time data1; arrVal[2] = Open data1; arrVal[3] = High data1; arrVal[4] = Low data1; arrVal[5] = Close data1; arrVal[6] = Ticks data1; arrVal[7] = BarNumber data1; arrVal[8] = BarInterval data1; arrVal[9] = BarType data1; arrVal[10] = CustomerID; arrVal[11] = UTScope; arrVal[12] = UTSmooth; arrVal[13] = GetAppInfo(aiOptimizing); arrVal[14] = UTRecent; arrVal[15] = UTStep; arrVal[20] = UTCloseFac; ret = PSS_UTC(txtID_,&arrVal[0],txtDiag); nGrade = arrVal[57]; nTrendAge = arrVal[60]; {====== ENTER WHEN ENTRY GRADE HAS BEEN REACHED ======================} IF ret > 0 THEN BEGIN IF nGrade >= Pos(EntryGrade) AND nGrade[1] < Pos(EntryGrade) then BEGIN Buy("LE") next bar Market; END; IF nGrade <= Neg(EntryGrade) AND nGrade[1] >= Neg(EntryGrade) then BEGIN SellShort("SE") next bar Market; END; end; {====== EXIT WHEN DIRECTION CHANGED ==================================} IF MarketPosition > 0 AND nGrade <= -1 AND nTrendAge > ExitAge THEN Sell("LX") Next bar Market; IF MarketPosition < 0 AND nGrade >= 1 AND nTrendAge > ExitAge THEN BuyToCover("SX") Next bar Market; {====== OPTIONAL AMOUNT BASED EXITS ==================================} IF ExitDayEnd > 0 THEN SetExitOnClose; // exit at end of day/session SetStopPosition; IF TargetAmount > 0 THEN SetProfitTarget(TargetAmount); // target/gain reached IF StopAmount > 0 then SetStopLoss(StopAmount); // fixed stop out protection IF TrailAmount > 0 THEN SetDollarTrailing(TrailAmount); // trailing stop {====== SHOW BAR COMMENT =============================================} IF AtCommentaryBar and CommentaryEnabled THEN BEGIN Vars: cmt(""); cmt = cmt + "Bar#" + numtostr(barnumber,0) + " Close=" + numtostr(C,5) + " High=" + numtostr(H,5) + " Low=" + numtostr(L,5) + newline; cmt = cmt + "Pos="+numtostr(marketposition,0) + " PosAge=" + numtostr(BarsSinceEntry,0) + " Left=" + numtostr(CurrentContracts,0) + " Entry=" + numtostr(EntryPrice,5) + " ExitAge=" + numtostr(BarsSinceExit(1),0) + newline; cmt = cmt + "Grade=" + Numtostr(arrVal[57],0) + "(" + Numtostr(arrVal[59],2) + ") Dir=" + Numtostr(arrVal[61],0) + " TrendAge=" + Numtostr(arrVal[60],0) + newline; cmt = cmt + "Scope=" + Numtostr(UTScope,0) + " Smooth=" + numtostr(UTSmooth,0) + " Recent=" + numtostr(UTRecent,1) + " Step=" + numtostr(UTStep,0) + " CloseFac=" + numtostr(UTCloseFac,0) + " 1.3a" + newline; commentary(cmt); END; {====== PROCESS ERRORS ===============================================} IF ret < -100 THEN RaiseRunTimeError(txtDiag);