Credo sia molto semplice ... per chi lo sa fare:
prezzo di chiusura (last trade, non chiusura ufficiale o prezzo di riferimento) ) del giorno precedente = prezzo;
3 numeri costanti da imputare manualmente = k1, k2, k3;
se ad esempio le costanti sono 0.25,0.50 e 0.75, l'output deve dare sei righe orizzontali in base alle seguenti formule:
L'indicatore è da usare in intraday
Sarebbe carino poter inserire un campo di moltiplicazione per gli strumenti con prezzo molto basso, ad esempio:
(((prezzo*moltiplicatore)^0.5-0.25)^2-0.25*10)/moltiplicatore
Cosa pensi? si può fare?
Se non è chiaro dimmelo e provo a fare un'altro esempio.
Grazie per la tua attenzione.
Credo sia molto semplice ... per chi lo sa fare:
prezzo di chiusura (last trade, non chiusura ufficiale o prezzo di riferimento) ) del giorno precedente = prezzo;
3 numeri costanti da imputare manualmente = k1, k2, k3;
se ad esempio le costanti sono 0.25,0.50 e 0.75, l'output deve dare sei righe orizzontali in base alle seguenti formule:
L'indicatore è da usare in intraday
Sarebbe carino poter inserire un campo di moltiplicazione per gli strumenti con prezzo molto basso, ad esempio:
(((prezzo*moltiplicatore)^0.5-0.25)^2-0.25*10)/moltiplicatore
Cosa pensi? si può fare?
Se non è chiaro dimmelo e provo a fare un'altro esempio.
Grazie per la tua attenzione.
Ho buttato giù velocemente una prima versione.
Riesco solo a darti la close del giorno prima, spero ti vada bene lo stesso.
Spero inoltre di avere interpretato correttamente le formule.
Io uso ancora la versione 10.6, come segnali ricevo solo le azioni italiane, ed ora i mercati sono chiusi.
Non ho potuto testarla in realtime. Provala e fammi sapere se funziona?
Saluti
Massimo
function preMain(){
setPriceStudy(true);
/* Set the title that will appear in the study pane */
setStudyTitle("WAPI");
/* Set the label that will appear in the cursor window */
setCursorLabelName("+K1", 0);
setCursorLabelName("+K2", 1);
setCursorLabelName("+K3", 2);
setCursorLabelName("-K1", 3);
setCursorLabelName("-K2", 4);
setCursorLabelName("-K3", 5);
setCursorLabelName("Prezzo", 6);
var fp1 = new FunctionParameter("vK1", FunctionParameter.NUMBER);
fp1.setName("K1");
fp1.setLowerLimit(0);
fp1.setDefault(0.25);
var fp1 = new FunctionParameter("vK2", FunctionParameter.NUMBER);
fp1.setName("K2");
fp1.setLowerLimit(0);
fp1.setDefault(0.50);
var fp1 = new FunctionParameter("vK3", FunctionParameter.NUMBER);
fp1.setName("K3");
fp1.setLowerLimit(0);
fp1.setDefault(0.75);
var fp1 = new FunctionParameter("vMult", FunctionParameter.NUMBER);
fp1.setName("Moltiplicatore");
fp1.setLowerLimit(0);
fp1.setDefault(1);
}
var bInit=false;
var vPrezzo=null;
var vWapi1=null;
var vWapi2=null;
var vWapi3=null;
var vWapi4=null;
var vWapi5=null;
var vWapi6=null;
function main(vK1,vK2,vK3,vMult){
if (bInit==false){
if (vK1==null) vK1=0.25;
if (vK2==null) vK2=0.50;
if (vK3==null) vK3=0.75;
if (vMult==null) vMult=1;
bInit=true;
}
if (getDay(0) != getDay(-1)) { // Solo ad ogni cambio di giorno esegue i calcoli
// Assegna a vPrezzo la chiusura del giorno prima
vPrezzo = close (-1, inv("D"));
//(((prezzo*moltiplicatore)^0.5-0.25)^2-0.25*10)/moltiplicatore
vWapi1 = (Math.pow((Math.pow(vPrezzo*vMult,0.5)+vK1),2)+vK1 *10)/vMult;
vWapi2 = (Math.pow((Math.pow(vPrezzo*vMult,0.5)+vK2),2)+vK2 *10)/vMult;
vWapi3 = (Math.pow((Math.pow(vPrezzo*vMult,0.5)+vK3),2)+vK3 *10)/vMult;
vWapi4 = (Math.pow((Math.pow(vPrezzo*vMult,0.5)-vK1),2)-vK1*10)/vMult;
vWapi5 = (Math.pow((Math.pow(vPrezzo*vMult,0.5)-vK2),2)-vK2*10)/vMult;
vWapi6 = (Math.pow((Math.pow(vPrezzo*vMult,0.5)-vK3),2)-vK3*10)/vMult;
}
if (vPrezzo==null) return;
return new Array (vWapi1,vWapi2,vWapi3,vWapi4,vWapi5,vWapi6,vPrezzo );
Max,
non so come ringraziarti ... funziona come volevo.
Anch'io uso la 10.6 per una serie di motivi e opero prevalentemente su futures.
Ovviamente cerco di approfittare della tua cortesia per chiederti se:
1) si possono estendere le linee verso destra?
2) quando un titolo apre con gap, uso il prezzo open della giornata invece del last del giorno precedente. Si può inserire qs opzione in modo che la scelta sia manuale?
E' corretto precisare che qs formula non è mia ma di un trader indiano che l'ha gentilmente postata in un forum pubblico. Qualcuno lo ha schernito ma utilizzando le giuste costanti ho verificato che dà livelli validi per il trading intraday.
Grazie ancora.
Prova questa versione che determina automaticamente se l'apertura è in gap rispetto al giorno prima.
Con quale criterio dovrebbe essere scelto il moltiplicatore ?
function preMain(){
setPriceStudy(true);
/* Set the title that will appear in the study pane */
setStudyTitle("WAPI");
/* Set the label that will appear in the cursor window */
setCursorLabelName("+K1", 0);
setCursorLabelName("+K2", 1);
setCursorLabelName("+K3", 2);
setCursorLabelName("-K1", 3);
setCursorLabelName("-K2", 4);
setCursorLabelName("-K3", 5);
setCursorLabelName("Prezzo", 6);
var fp1 = new FunctionParameter("vK1", FunctionParameter.NUMBER);
fp1.setName("K1");
fp1.setLowerLimit(0);
fp1.setDefault(0.25);
var fp1 = new FunctionParameter("vK2", FunctionParameter.NUMBER);
fp1.setName("K2");
fp1.setLowerLimit(0);
fp1.setDefault(0.50);
var fp1 = new FunctionParameter("vK3", FunctionParameter.NUMBER);
fp1.setName("K3");
fp1.setLowerLimit(0);
fp1.setDefault(0.75);
var fp1 = new FunctionParameter("vMult", FunctionParameter.NUMBER);
fp1.setName("Moltiplicatore");
fp1.setLowerLimit(0);
fp1.setDefault(1);
var fp1 = new FunctionParameter("vExt", FunctionParameter.NUMBER);
fp1.setName("Quante barre estendi a destra ?");
fp1.setLowerLimit(0);
fp1.setDefault(10);
}
var bInit=false;
var vPrezzo=null;
var vWapi1=null;
var vWapi2=null;
var vWapi3=null;
var vWapi4=null;
var vWapi5=null;
var vWapi6=null;
function main(vK1,vK2,vK3,vMult,vExt){
if (bInit==false){
if (vK1==null) vK1=0.25;
if (vK2==null) vK2=0.50;
if (vK3==null) vK3=0.75;
if (vMult==null) vMult=1;
if (vExt==null) vExt=10;
bInit=true;
}
if (getDay(0) != getDay(-1)) { // Solo ad ogni cambio di giorno esegue i calcoli
// Se apertura in gap assegna a vPrezzo valore open oggi
if (open(0, inv("D")) > high(-1, inv("D")) || open(0, inv("D")) < low(-1, inv("D"))) vPrezzo = open (0, inv("D"));
// altrimenti assegna a vPrezzo la chiusura del giorno prima
else vPrezzo = close (-1, inv("D"));
//(((prezzo*moltiplicatore)^0.5-0.25)^2-0.25*10)/moltiplicatore
vWapi1 = (Math.pow((Math.pow(vPrezzo*vMult,0.5)+vK1),2)+vK1 *10)/vMult;
vWapi2 = (Math.pow((Math.pow(vPrezzo*vMult,0.5)+vK2),2)+vK2 *10)/vMult;
vWapi3 = (Math.pow((Math.pow(vPrezzo*vMult,0.5)+vK3),2)+vK3 *10)/vMult;
vWapi4 = (Math.pow((Math.pow(vPrezzo*vMult,0.5)-vK1),2)-vK1*10)/vMult;
vWapi5 = (Math.pow((Math.pow(vPrezzo*vMult,0.5)-vK2),2)-vK2*10)/vMult;
vWapi6 = (Math.pow((Math.pow(vPrezzo*vMult,0.5)-vK3),2)-vK3*10)/vMult;
}
if (vPrezzo==null) return;
if (getBarState()==BARSTATE_NEWBAR) { // Ad ogni nuova barra
drawLineRelative(-1, vWapi1, vExt, vWapi1, PS_SOLID, 1, Color.green, "Wapi1");
drawLineRelative(-1, vWapi2, vExt, vWapi2, PS_SOLID, 1, Color.green, "Wapi2");
drawLineRelative(-1, vWapi3, vExt, vWapi3, PS_SOLID, 1, Color.green, "Wapi3");
drawLineRelative(-1, vWapi4, vExt, vWapi4, PS_SOLID, 1, Color.green, "Wapi4");
drawLineRelative(-1, vWapi5, vExt, vWapi5, PS_SOLID, 1, Color.green, "Wapi5");
drawLineRelative(-1, vWapi6, vExt, vWapi6, PS_SOLID, 1, Color.green, "Wapi6");
drawLineRelative(-1, vPrezzo, vExt, vPrezzo, PS_SOLID, 1, Color.blue, "vPrezzo");
}
return new Array (vWapi1,vWapi2,vWapi3,vWapi4,vWapi5,vWapi6,vPrezzo );
Ciao Wapi,
ho corretto un errore nel programma, inoltre ti ho aggiunto la possibilità di scegliere come prezzo tra Close di ieri ed Open di oggi.
Cordialmente.
Massimo
/* Set the title that will appear in the study pane */
setStudyTitle("WAPI");
/* Set the label that will appear in the cursor window */
setCursorLabelName("+K1", 0);
setCursorLabelName("+K2", 1);
setCursorLabelName("+K3", 2);
setCursorLabelName("-K1", 3);
setCursorLabelName("-K2", 4);
setCursorLabelName("-K3", 5);
setCursorLabelName("Prezzo", 6);
var fp1 = new FunctionParameter("vK1", FunctionParameter.NUMBER);
fp1.setName("K1");
fp1.setLowerLimit(0);
fp1.setDefault(0.25);
var fp2 = new FunctionParameter("vK2", FunctionParameter.NUMBER);
fp2.setName("K2");
fp2.setLowerLimit(0);
fp2.setDefault(0.50);
var fp3 = new FunctionParameter("vK3", FunctionParameter.NUMBER);
fp3.setName("K3");
fp3.setLowerLimit(0);
fp3.setDefault(0.75);
var fp4 = new FunctionParameter("vMult", FunctionParameter.NUMBER);
fp4.setName("Moltiplicatore");
fp4.setLowerLimit(0);
fp4.setDefault(1);
var fp5 = new FunctionParameter("vExt", FunctionParameter.NUMBER);
fp5.setName("Quante barre estendi a destra ?");
fp5.setLowerLimit(0);
fp5.setDefault(10);
var fp6 = new FunctionParameter("vGap", FunctionParameter.NUMBER);
fp6.setName("Usa Close ieri (0) o Open oggi (1) ?");
fp6.setLowerLimit(0);
fp6.addOption(0);
fp6.addOption(1);
fp6.setDefault(0);
}
var bInit=false;
var vPrezzo=null;
var vWapi1=null;
var vWapi2=null;
var vWapi3=null;
var vWapi4=null;
var vWapi5=null;
var vWapi6=null;
function main(vK1,vK2,vK3,vMult,vExt,vGap){
if (bInit==false){
if (vK1==null) vK1=0.25;
if (vK2==null) vK2=0.50;
if (vK3==null) vK3=0.75;
if (vMult==null) vMult=1;
if (vExt==null) vExt=10;
if (vGap==null || vGap>1) vGap=0;
bInit=true;
}
if (getDay(0) != getDay(-1)) { // Solo ad ogni cambio di giorno esegue i calcoli
// Se apertura in gap assegna a vPrezzo valore open oggi
if (vGap==1) vPrezzo = open (0, inv("D"));
// altrimenti assegna a vPrezzo la chiusura del giorno prima
else vPrezzo = close (-1, inv("D"));
//(((prezzo*moltiplicatore)^0.5-0.25)^2-0.25*10)/moltiplicatore
vWapi1 = (Math.pow((Math.pow(vPrezzo*vMult,0.5)+vK1),2)+vK1 *10)/vMult;
vWapi2 = (Math.pow((Math.pow(vPrezzo*vMult,0.5)+vK2),2)+vK2 *10)/vMult;
vWapi3 = (Math.pow((Math.pow(vPrezzo*vMult,0.5)+vK3),2)+vK3 *10)/vMult;
vWapi4 = (Math.pow((Math.pow(vPrezzo*vMult,0.5)-vK1),2)-vK1*10)/vMult;
vWapi5 = (Math.pow((Math.pow(vPrezzo*vMult,0.5)-vK2),2)-vK2*10)/vMult;
vWapi6 = (Math.pow((Math.pow(vPrezzo*vMult,0.5)-vK3),2)-vK3*10)/vMult;
}
if (vPrezzo==null) return;
if (getBarState()==BARSTATE_NEWBAR) { // Ad ogni nuova barra
drawLineRelative(-1, vWapi1, vExt, vWapi1, PS_SOLID, 1, Color.green, "Wapi1");
drawLineRelative(-1, vWapi2, vExt, vWapi2, PS_SOLID, 1, Color.green, "Wapi2");
drawLineRelative(-1, vWapi3, vExt, vWapi3, PS_SOLID, 1, Color.green, "Wapi3");
drawLineRelative(-1, vWapi4, vExt, vWapi4, PS_SOLID, 1, Color.red, "Wapi4");
drawLineRelative(-1, vWapi5, vExt, vWapi5, PS_SOLID, 1, Color.red, "Wapi5");
drawLineRelative(-1, vWapi6, vExt, vWapi6, PS_SOLID, 1, Color.red, "Wapi6");
drawLineRelative(-1, vPrezzo, vExt, vPrezzo, PS_SOLID, 1, Color.blue, "vPrezzo");
}
return new Array (vWapi1,vWapi2,vWapi3,vWapi4,vWapi5,vWapi6,vPrezzo );
Comment