Discussione: Scripts di esempio
-
15-03-13, 22:14 #101
-
15-03-13, 22:18 #102
I file si possono condividere se si invia in condivisione la strategia su cui è scritto lo script.
..se corri dietro a due lepri, non ne prendi nemmeno una.
-
15-03-13, 23:19 #103
- Data Registrazione
- Feb 2012
- Località
- Pisa
- Messaggi
- 351
Ciao,
in attesa di Max ....... intanto ti rispondo io:
Dim myUnderlying as TUnderlying Dim myHistoryDataContext as THistoryDataContext Dim myHistoricalData as THistoricalData Dim myDataVectorCLOSE as TDataVector myUnderlying = CurrentStrategy.GetMainUnderlying myHistoryDataContext = myUnderlying.AssertHistory(RTH_5MIN) 'Ottenimento dei dati storici dei CLOSE myHistoricalData = myHistoryDataContext.HistoricalData myDataVectorCLOSE = myHistoricalData.VectorClose 'Metodo alternativo per l'ottenimento dei dati storici dei CLOSE: 'myDataVectorCLOSE = myHistoryDataContext.GetSerieByName("CLOSE") 'Richiesta di mostrare i valori di alcune proprietà ShowMessage("Ultimo valore in ordine temporale: " & myDataVectorCLOSE.Last) ShowMessage("Penultimo valore in ordine temporale: " & myDataVectorCLOSE.LastClosed) 'A questo punto utilizzando opportunamente le proprietà ed i metodi 'della classe TDataVector (vedere il Manuale !!!!) 'è possibile ottenere altre informazioni.
E questo penso che sia soltanto un assaggio!
-
15-03-13, 23:52 #104
- Data Registrazione
- Aug 2008
- Località
- Edolo (BS)
- Messaggi
- 693
-
15-03-13, 23:55 #105
- Data Registrazione
- Aug 2008
- Località
- Edolo (BS)
- Messaggi
- 693
-
16-03-13, 09:43 #106
- Data Registrazione
- Feb 2012
- Località
- Pisa
- Messaggi
- 351
Di nulla!
Puoi sperimentare anche questo:
dati storici daily, non solo il CLOSE ma tutta la barra
Dim myUnderlying as TUnderlying Dim myHistoryDataContext as THistoryDataContext Dim myHistoricalData as THistoricalData Dim myDataVectorDATE as TDataVector Dim myDataVectorOPEN as TDataVector Dim myDataVectorHIGH as TDataVector Dim myDataVectorLOW as TDataVector Dim myDataVectorCLOSE as TDataVector Dim myDataVectorVOLUME as TDataVector Dim nBarsAgo as Integer Dim str as String myUnderlying = CurrentStrategy.GetMainUnderlying myHistoryDataContext = myUnderlying.AssertHistory(RTH_1D) 'Ottenimento dei dati storici myHistoricalData = myHistoryDataContext.HistoricalData myDataVectorDATE = myHistoricalData.VectorDate myDataVectorOPEN = myHistoricalData.VectorOpen myDataVectorHIGH = myHistoricalData.VectorHigh myDataVectorLOW = myHistoricalData.VectorLow myDataVectorCLOSE = myHistoricalData.VectorClose myDataVectorVOLUME = myHistoricalData.VectorVolume 'Richiesta di mostrare i valori dell'ultima barra o candela str = "Ultima barra non chiusa se a mercati aperti:" str = str & Chr(13) & Chr(10) str = str & "Data: " & CDate(myDataVectorDATE.Last) str = str & Chr(13) & Chr(10) str = str & "Apertura: " & myDataVectorOPEN.Last str = str & Chr(13) & Chr(10) str = str & "Massimo: " & myDataVectorHIGH.Last str = str & Chr(13) & Chr(10) str = str & "Minimo: " & myDataVectorLOW.Last str = str & Chr(13) & Chr(10) str = str & "Chiusura: " & myDataVectorCLOSE.Last str = str & Chr(13) & Chr(10) str = str & "Volume: " & myDataVectorVOLUME.Last ShowMessage(str) 'Richiesta di mostrare i valori della penultima barra o candela str = "Ultima barra sicuramente chiusa:" str = str & Chr(13) & Chr(10) str = str & "Data: " & CDate(myDataVectorDATE.LastClosed) str = str & Chr(13) & Chr(10) str = str & "Apertura: " & myDataVectorOPEN.LastClosed str = str & Chr(13) & Chr(10) str = str & "Massimo: " & myDataVectorHIGH.LastClosed str = str & Chr(13) & Chr(10) str = str & "Minimo: " & myDataVectorLOW.LastClosed str = str & Chr(13) & Chr(10) str = str & "Chiusura: " & myDataVectorCLOSE.LastClosed str = str & Chr(13) & Chr(10) str = str & "Volume: " & myDataVectorVOLUME.LastClosed ShowMessage(str) nBarsAgo = 2 'Richiesta di mostrare i valori di n barre fa str = "Dati di " & nBarsAgo & " barre fa:" str = str & Chr(13) & Chr(10) str = str & "Data: " & CDate(myDataVectorDATE.Value[myDataVectorDATE.Size-1-nBarsAgo]) str = str & Chr(13) & Chr(10) str = str & "Apertura: " & myDataVectorOPEN.Value[myDataVectorOPEN.Size-1-nBarsAgo] str = str & Chr(13) & Chr(10) str = str & "Massimo: " & myDataVectorHIGH.Value[myDataVectorHIGH.Size-1-nBarsAgo] str = str & Chr(13) & Chr(10) str = str & "Minimo: " & myDataVectorLOW.Value[myDataVectorLOW.Size-1-nBarsAgo] str = str & Chr(13) & Chr(10) str = str & "Chiusura: " & myDataVectorCLOSE.Value[myDataVectorCLOSE.Size-1-nBarsAgo] str = str & Chr(13) & Chr(10) str = str & "Volume: " & myDataVectorVOLUME.Value[myDataVectorVOLUME.Size-1-nBarsAgo] ShowMessage(str)
A mercati aperti il primo messaggio dovrebbe indicare i dati della barra in real time (quella che non si è ancora chiusa).
Il terzo messaggio: per n=0 coinciderebbe con il primo messaggio; per n=1 coinciderebbe con il secondo messaggio.Ultima modifica di Smash; 16-03-13 alle 10:35
-
17-03-13, 16:07 #107
- Data Registrazione
- Aug 2008
- Località
- Edolo (BS)
- Messaggi
- 693
Intanto un enorme grazie a Ismael e a Smash perchè con i loro esempi mi hanno permesso di fare un altro piccolo step in avanti :-)
Ora vorrei chiedere un aiutino a loro...o a chi vorrà suggerire (Max comrpeso ovviamente ) come posso risolvere questo...
Avrei bisogno di far seseguire all'interno dello Script, una determinata procedura ma solo un TOT numero di volte, supponiamo 2.
Ho pensato quindi di utilizzare un contatore, ogni volta che quella procedura viene eseguita...
L'idea sarebbe:
if (contatore<2) then
ecc. ecc.
...ma succede questo:
definisco inizialmente il contatore e lo setto a zero
dim contatore as Integer = 0
poi definisco la procedura, supponiamo sia questa
if (sottostante.Last < 10.00) then
contatore = contatore+1
end if
fin qui tutto ok perchè effettivamente il contatore in questo caso diventa 1
però succede che se tale condizione non è più vera (ad esempio il sottostante torna sopra 10) il contatore si resetta a zero...invece vorrei che rimanesse 1
Ho anche pensato di utilizzare un file esterno come contatore...ma non sono riuscito.
Spero di essermi spiegato...
Magari esiste un modo più semplice per limitare il numero di iterazioni di una specifica procedura...
Grazie a chi darà una mano!!
-
17-03-13, 16:52 #108
- Data Registrazione
- Jan 2011
- Località
- Castiglioncello (LI)
- Messaggi
- 240
A quanto ho capito ti si azzera il valore del contatore ogni volta che parte lo script (ed è così che deve essere). Per ovviare devi usare
SetPersistentVar(nome variabile,valore)
che assegna in maniera permanente il valore alla variabile e non ne riinizializza il valore ogni nuova esecuzione dello script.
spero di esserti stato di aiuto.
RobertoE' difficile vedere un gatto nero in una stanza buia, specialmente se non c'è.
-
17-03-13, 17:11 #109
- Data Registrazione
- Aug 2008
- Località
- Edolo (BS)
- Messaggi
- 693
Ciao Ismael...in realtà ho già tentato anche con SetPersistentVar
ma una volta settata non riesco più a modificarla...
nel senso che se diventa 1...poi rimane sempre 1...(e non va a 2 all'esecuzione successiva ad esempio)
magari ho sbagliato qualcosa nell'istruzione...
-
17-03-13, 23:49 #110
- Data Registrazione
- Feb 2012
- Località
- Pisa
- Messaggi
- 351
Ciao Chris,
nemmeno io sono riuscito a fare funzionare la Sub SetPersistentVar ...
Con il file di testo invece per ora puoi provare con qualcosa di questo tipo:
1) Ti crei manualmente un file di testo (nell'esempio di seguito si trova nella cartella delle strategie di Fiuto Pro ed ha lo stesso nome della strategia stessa)
2) Per scrivere su file di testo usi un codice di questo tipo:
Uses Classes Dim FileName as String Dim FileTesto as TStringList Dim contatore as String Dim contatoreMax as String FileTesto = New TStringList Filename = GetDocPath + "\PlayOptions.it\FiutoPro\" + CurrentStrategy.Name + ".txt" FileTesto.LoadFromFile(FileName) contatoreMax = 2 If FileTesto.Text = contatoreMax & Chr(13) & Chr(10) Then FileTesto.SetText("0") FileTesto.SaveToFile(FileName) Else contatore = CInt(FileTesto.Text) + 1 FileTesto.SetText(contatore) FileTesto.SaveToFile(FileName) End If FileTesto.LoadFromFile(FileName) ShowMessage(FileTesto.Text) FileTesto.Free
E' un metodo un po' rudimentale, nel senso che purtroppo il file di testo te lo devi creare a mano. Sicuramente usando le API di Windows è migliorabile automatizzandolo completamente.