Répondre

StrategyQuant Jar Libraries Documentation

1 réponses

louloufrenchy

Abonné, bbp_participant, client, communauté, sq-ultimate, 8 réponses.

Visiter le profil

Il y a 2 semaines #291229

Bonjour,

 

Je suis en train d'explorer CustomAnalysis pour les métriques. J'essaie d'accéder aux bibliothèques pertinentes.

 

Les éléments suivants existent-ils DataManager, IDatabank, IBarsProvider ?

 

Comment accéder à la liste complète des bibliothèques disponibles à l'importation dans CodeEditor ?

 

Dans CodeEditor, lorsque je commence à taper com., une liste s'affiche, mais il serait utile d'avoir des détails sur l'objectif de chaque bibliothèque.

 

 

0

louloufrenchy

Abonné, bbp_participant, client, communauté, sq-ultimate, 8 réponses.

Visiter le profil

Il y a 2 semaines #291239

package SQ.CustomAnalysis ;
import com.strategyquant.tradinglib.CustomAnalysisMethod ;
import com.strategyquant.tradinglib.CustomAnalysisMethod.SettingType ;
import com.strategyquant.tradinglib.ResultsGroup ;
import com.strategyquant.lib.app.MainApp ;
import javax.script.ScriptEngine ;
import javax.script.ScriptEngineManager ;
import javax.script.ScriptContext ;
import javax.script.SimpleScriptContext ;
import java.io.FileReader ;
import java.io.StringWriter ;
/**
 * CAJythonScript
 *
 * Exécute un script Python externe (via Jython) et stocke sa sortie standard (stdout).
 * dans les valeurs spéciales du ResultsGroup sous la clé "PythonOutput".
 */
public class CAJythonScript extends CustomAnalysisMethod {
    public CAJythonScript() {
        // TYPE_FILTER_STRATEGY signifie qu'il est exécuté dans l'étape "Stratégies de filtrage".
        super("CAJythonScript", TYPE_FILTER_STRATEGY) ;
        // Exemple d'ajout d'un paramètre pour le dossier des scripts Python (facultatif)
        addSetting("PythonFolder", SettingType.String, "python",
                   "Chemin relatif sous user/ où se trouvent vos fichiers .py") ;
    }
    @Override
    public boolean filterStrategy(
            Projet de cordes,
            Tâche en chaîne,
            Chaîne Nom de la banque de données,
            Groupe de résultats rg
    ) jette l'exception {
        // Chemin d'accès à votre script Python
        String pythonFolder = getSettingAsString("PythonFolder") ;
        String basePath = MainApp.getDataPath() + pythonFolder + MainApp.getFS() ;
        String scriptPath = basePath + "sqpython.py" ;
        // Préparer le moteur Jython avec sa propre capture stdout
        ScriptEngineManager mgr = new ScriptEngineManager() ;
        ScriptEngine engine = mgr.getEngineByName("jython") ;
        // Si votre .py importe des modules locaux dans user/python/, ajoutez-le à sys.path
        engine.eval("import sys ; sys.path.insert(0, r\" + basePath + "\")") ;
        // Capture de tout ce que le script Python imprime
        StringWriter writer = new StringWriter() ;
        ScriptContext ctx = nouveau SimpleScriptContext() ;
        ctx.setWriter(writer) ;
        // Exécuter le script Python
        engine.eval(new FileReader(scriptPath), ctx) ;
        // Saisir et découper la sortie
        String pythonOutput = writer.toString().trim() ;
        // Le stocker dans le ResultsGroup pour une utilisation ultérieure
        rg.specialValues().set("PythonOutput", pythonOutput) ;
        // Retourne toujours true pour que cette CustomAnalysis n'abandonne pas les stratégies
        retourner vrai ;
    }
}
J'obtiens des erreurs de bibliothèques. C'est la 2ème partie qui accède à l'autre classe
package SQ.CustomAnalysis ;
import com.strategyquant.tradinglib.CustomAnalysisMethod ;
import com.strategyquant.tradinglib.ResultsGroup ;
import com.strategyquant.lib.app.MainApp ;
import javax.script.ScriptEngine ;
import javax.script.ScriptEngineManager ;
import javax.script.ScriptContext ;
import javax.script.SimpleScriptContext ;
import java.io.FileReader ;
import java.io.StringWriter ;
public class CAJythonScript extends CustomAnalysisMethod {
    public CAJythonScript() {
        super("CAJythonScript", TYPE_FILTER_STRATEGY) ;
    }
    @Override
    public boolean filterStrategy(
            Projet de cordes,
            Tâche en chaîne,
            Chaîne Nom de la banque de données,
            Groupe de résultats rg
    ) jette l'exception {
        // préparer un rédacteur pour capturer le stdout de Python
        StringWriter writer = new StringWriter() ;
        ScriptContext ctx = nouveau SimpleScriptContext() ;
        ctx.setWriter(writer) ;
        // utiliser le moteur Jython et exécuter votre script
        ScriptEngineManager mgr = new ScriptEngineManager() ;
        ScriptEngine engine = mgr.getEngineByName("jython") ;
        // suppose que sqpython.py se trouve dans votre dossier de données SQ
        String script = MainApp.getDataPath() + "sqpython.py" ;
        engine.eval(new FileReader(script), ctx) ;
        // récupérer ce que Python a imprimé
        String pythonOut = writer.toString().trim() ;
        // le cacher dans la carte specialValues du résultat
        rg.specialValues().set("PythonOutput", pythonOut) ;
        // renvoie toujours true pour que le filtrage n'annule pas vos stratégies
        retourner vrai ;
    }
}

0

Affichage d'1 réponse (sur un total de 1)