Page 1 of 1

Esignal Realtime Strategy

Posted: Tue Sep 25, 2007 2:14 am
by zeller4
I've attached a simple long-only study I'm testing.

I've researched all the backtesting tutorials on the Esignal forums and am having trouble resetting the entry orders for when my limit price doesn't fill. I also cannot seem to figure out why a couple graphic lines don't produce the expected results.

Anybody who is good with Esignal code? Your help will be greatly appreciated.

Sincerely,
Kirk


Code: Select all

var vEMA8 = new MAStudy(8, 0, "Close", MAStudy.EXPONENTIAL);
var vMid_1 = null;
var vLastAlert = -1;
var bLongSetup = false;
var bLongFilled = false;
var bLongNotFilled = false;
var bLongTargetHit = false;
var bLongStopHit = false;
var vTargetPrice = null;
var vLastAlert = -1;


function preMain() {


    setPriceStudy(true);
    setStudyTitle("test reset");
    setCursorLabelName("ma", 0);
    setCursorLabelName("entry", 1);
    setCursorLabelName("target", 2);
    setDefaultBarStyle(PS_SOLID, 0);
    setDefaultBarStyle(PS_SOLID, 1);
    setDefaultBarStyle(PS_SOLID, 2);
    setDefaultBarFgColor(Color.red, 0);
    setDefaultBarFgColor(Color.blue, 1);
    setDefaultBarFgColor(Color.green, 2);
    setDefaultBarThickness(2, 0);
    setDefaultBarThickness(3, 1);
    setDefaultBarThickness(3, 2);
    setPlotType(PLOTTYPE_LINE, 0);
    setPlotType(PLOTTYPE_FLATLINES, 1);
    setPlotType(PLOTTYPE_FLATLINES, 2);
   
   
}

function main() {

vMid_1 = Math.round((((high(-1)-low(-1))*.5)+low(-1))*10)/10;
vTargetPrice = vMid_1 + 1.0;           
if (vMid_1 == null) return;

//LONG SETUP
       if (
            close(-1) > vEMA8.getValue(MAStudy.MA, -1) &&
            close() > vEMA8.getValue(MAStudy.MA)
        ) {
            if(
                bLongSetup != true &&
                bLongFilled != true
            ) {
                ///*if (vLastAlert != 1)*/ setBarBgColor(Color.RGB(0,128,18));
                bLongSetup = true;
                //vMid_1 = Math.round((((high(-1)-low(-1))*.5)+low(-1))*10)/10;
               
                drawTextRelative(0,low()-1.5,"LONGSETUP",Color.black,Color.lime,Text.ONTOP | Text.VCENTER |
                    Text.CENTER|Text.BOLD | Text.ITALIC,"Arial",8,getValue("rawtime") + "LS1a" );
                vLastAlert = 1;
            }
        } else {
            vMid_1 = null;
            vTargetPrice = null;
        }

//TEST FOR LONG FILL
        if (
            bLongSetup == true &&
            bLongFilled != true
        ) {
            vMid_1 = Math.round((((high(-1)-low(-1))*.5)+low(-1))*10)/10;
            vTargetPrice = vMid_1 + 1.0;
            if(
                low(0) < vMid_1 &&
                high(0) > vMid_1
           
            ) {
                ///*if (vLastAlert != 2)*/ setBarBgColor(Color.RGB(160,255,160));
                bLongFilled = true;
                drawTextRelative(0,low()-1.5,"LONG",Color.white,Color.green,Text.ONTOP | Text.VCENTER |
                    Text.CENTER|Text.BOLD | Text.ITALIC,"Arial",8,getValue("rawtime") + "L1a" );
                vLastAlert = 2;
            } else if (
                (low() > vMid_1 ||
                high() < vMid_1)
            ) {
                ///*if (vLastAlert != 3)*/ setBarBgColor(Color.RGB(160,160,164));
                vLastAlert = 3;
                bLongNotFilled = true;
            }
        }
//SETUP STILL TRUE, NOT YET FILLED
        if (
            bLongSetup == true &&
            bLongFilled != true &&
            bLongNotFilled == true
        ) {
            vMid_1 = Math.round((((high(-1)-low(-1))*.5)+low(-1))*10)/10;
            vTargetPrice = vMid_1 + 1.0;
            if(
                low(0) < vMid_1 &&
                high(0) > vMid_1
           
            ) {
                ///*if (vLastAlert != 2)*/ setBarBgColor(Color.RGB(160,255,160));
                bLongFilled = true;
            } else {
            bLongNotFilled = true;
            }
        }
 
debugClear();

debugPrintln("vLastAlert  "+vLastAlert ); 
debugPrintln("vMid_1  "+vMid_1 ); 
debugPrintln("bLongTargetHit  "+bLongTargetHit ); 
debugPrintln("bLongNotFilled  "+bLongNotFilled ); 
debugPrintln("bLongFilled  "+bLongFilled ); 
debugPrintln("bLongSetup  "+bLongSetup ); 
       
       

if ( bLongSetup == true && bLongFilled != true && bLongNotFilled != true) {setBarBgColor(Color.RGB(0,128,18));}
if ( bLongSetup != true && bLongFilled == true && bLongNotFilled != true) {setBarBgColor(Color.RGB(160,255,160));drawTextRelative(0,low()-1.5,"LONG",Color.white,Color.green,Text.ONTOP | Text.VCENTER |
                    Text.CENTER|Text.BOLD | Text.ITALIC,"Arial",8,getValue("rawtime") + "L1f" );}
               
if ( bLongSetup != true && bLongFilled != true && bLongNotFilled == true) {setBarBgColor(Color.RGB(160,160,164));}

    return new Array(
        vEMA8.getValue(MAStudy.MA),
        vMid_1,
        vTargetPrice
    );

}

rev.1

Posted: Tue Sep 25, 2007 3:53 pm
by zeller4
been working wih the btProfit-target.efs to get some more ideas for this long-only study.

I figured a couple things out, needed to place exits, eliminate the "notfilled" condition, etc.

I need to know how to extend the vEntryPrice and vTargetPrice to the right until they are filled.

please see the attached revised efs

thanks for any help you can give