T O P I C R E V I E W |
VpV |
Posted - 27 April 2016 : 01:03:12 Salve,
in merito all'oggetto, volevo sapere se l'utilizzo dello stesso per inibire ad un TS l'operatività per qualche giorno, sia una funzione corretta oppure no.
Nello specifico intendo vietare ad un TS di operare per qualche giorno a seguito di un segnale di chiusura normale o di stoploss verificato. L'aiuto in locale non mi ha fornito ulteriori spunti e quello sul sito non esiste più, la pagina è quella di Over. Ho guardato anche su Over ma per adesso non trovo una descrizione delle funzioni in generale.
Se non ho capito male BarSince mi dovrebbe fornire il numero di periodi in cui una condizione risulta verificata, vera.
Grazie. |
8 L A T E S T R E P L I E S (Newest First) |
SupportoTecnico |
Posted - 03 May 2016 : 16:05:09 L'utilizzo di DbExp è assolutamente consigliato, primo per la versatilità rispetto a DbValue e poi per la velocità. In Overcharts, per esempio, DbValue non esiste più.
|
VpV |
Posted - 03 May 2016 : 14:33:03 Confermo, problema risolto con CurrentBar. Processo inverso per quanto riguarda lo stop che viene indicato, come valore, nel modulo acquisto/vendita.
Qui è il modulo "chiudi posizione" che comanda e quindi il modulo acquisto/vendita richiamerà dal primo il valore della barra e la condizione verificata.
Risolto questo problema, volevo sapere la differenza tra le funzioni "DbValue" e "DbExp"; io uso solo DbValue ma ho letto che è una funzione obsoleta e che DbExp è un sostituto. Visto che di calcoli ne faccio tanti e quindi la velocità non è mai troppa, volevo sapere se potevo sostituire tutte le funzioni DbValue con DbExp e quindi se vi è certezza che nei risultati non cambierà nulla.
Grazie |
SupportoTecnico |
Posted - 02 May 2016 : 20:03:41 L'uso di CurrentBar potrebbe essere una buona idea! Memorizzando la barra al momento giusto e poi andando di differenza tra CurrentBar e la barra memorizzata potresti di fatto risolvere. |
VpV |
Posted - 02 May 2016 : 17:18:30 Forse ho risolto con CurrentBar.
Vi faccioa sapere. |
VpV |
Posted - 02 May 2016 : 16:34:13 Allora, allo stato attuale ancora non sono riuscito a creare la giusta procedura.
1)Ho provato nuovamente BarSince ma ho notato che lo stesso produce sempre la somma dei periodi da dove è partito l'evento. Ho provato ad azzerare ma non ho ottenuto risultati, nel senso che mi dà errore.
2)Ho provato con la vostra contaperiodi, VaribileComune + 1 ecc...ma il TS non entra proprio in posizione.
3)Ho provato con un ciclo for...next, dicendogli in pratica "se si verifica questo evento, rimani fermo x giorni"..ma ho ottenuto lo stesso risultato del caso 2.
Credo che il problema sia che una volta che scatta la condizione, il TS lo legge "per sempre"; se quindi ho uno stop esplicito, devo trovare il modo di scrivere :
-se STOP vero allora aspetta x periodi-
-se x > y allora procedi-
-se x > y allora azzera tutto-
Non posso farla semplice perchè le uscite dai vari moduli, come gli ingressi, hanno molteplici casistiche e variabili.
Spero di essere stato chiaro.
Grazie
|
SupportoTecnico |
Posted - 27 April 2016 : 21:53:12 Probabilmente bisogna gestire meglio l'azzeramento della VariabileComune. Forse va fatto solo quando la funzione Main ritorna True e quindi entra o long o short. Insomma dovresti scrivere una cosa del tipo:
dim bSignal as Boolean bSignal = (a < b)
if (bSignal = True) then VariabileComune = 0 EndIf
Return bSignal
La logica con cui l'interprete esegue i vari moduli è:
Se la posizione è "Out": Cerca ingresso Long Se non trovato ingresso long allora cerca Ingresso Short
Se la posizione è "Long" Cerca uscita long Cerca segnale Short
Se la posizione è "Short" Cerca uscita short Cerca segnale Long
Detto questo ti invito a utilizzare Overcharts per mettere a punto il tuo trading system. Il motivo è che tra le altre cose Overcharts ti mette a disposizione un vero debugger. In pratica, contrariamente ad Insider 3000, Developer di Overcharts ti consente di eseguire passo passo il tuo trading system esattamente come verrà poi eseguito nella realtà, con la possibilità di controllare il valore delle varie variabili ecc.. Insomma un aiuto in più non indifferente. Con Insider 3000 invece puoi eseguire il debug di un solo modulo per volta, con tutte le limitazioni del caso.
|
VpV |
Posted - 27 April 2016 : 18:28:36 Buonasera,
allora ho provato più volte la funzione BarSince per evitare ulteriore righe di programma, ma allo stato attuale, implementandola nel modulo di ingresso, ho ottenuto solo strani risultati, direi poco logici nel funzionamento.
Allora ho fatto quanto scritto da voi, ovvero ho creato una variabile nel modulo comune e poi ho proceduto come segue (esempio) :
MOD.Comune Dim VariabileComune as numeric
MOD.EntraInVendita
Function main ()
Dim a as numeric Dim b as numeric
if close > stoploss then VariabileComune = VariabileComune + 1 endif
if VariabileComune < 2 then return false endif
VariabileComune = 0
stoploss=close+close*0,03
return a < b
endfunction
Ovviamente è solo un esempio per farvi capire, l'algortimo del TS è altra cosa. Ho provato a spostare tutto, dagli IF allo stoploss, sopra, sotto e altro ancora ma quello che ottengo è niente ovvero il TS non produce segnali di vendita.
A parte la logica difficile da capire, ovvero come funziona l'interprete, un pò come avviene per lo stop che occorre dichiararlo nel modulo di ingresso per poi utilizzarlo in quello in uscita, qui posso solo ipotizzare il fatto che il problema si trovi nello stoploss dello stesso modulo e che magari non venga letto.
In questo specifico caso non riesco a capire "come ragiona" l'interprete.
|
SupportoTecnico |
Posted - 27 April 2016 : 11:18:55 Teoricamente si, BarSince dovrebbe essere la funzione giusta, anche se io sinceramente opterei per un controllo più manuale della cosa, e cioè creerei una variabile comune a tutti i moduli (cioè dichiarata nel modulo comune), per tenere conto del conteggio dei giorni, e poi inserirei la mia condizione sia nel modulo di entrata long che entrata short:
If (condizione di incremento giorni) Then VariabileComune = VariabileComune + 1 EndIf
If (VariabileComune < NumeroGiorni) Then Return False EndIf
VariabileComune = 0
Le due If vanno messe ovviamente all'inizio della funzione Main dei rispettivi moduli. Se la condizione è superata è necessario azzerare la variabile comune.
|
|
|