Répondre

StrategyQuant Les stratégies ne sont pas rentables lorsqu'elles sont codées en C

8 réponses

Charles

Client, bbp_participant, communauté, 0 réponses.

Visiter le profil

il y a 5 ans #237334

J'ai recodé les stratégies générées par Strategyquant dans Zorro Trader, qui utilise le langage C allégé, et les résultats sont tout simplement époustouflants.

SQ X montre un profit énorme alors que Zorro montre une perte. Le nombre de transactions n'est même pas proche et les deux systèmes utilisent les mêmes données car j'ai exporté les bougies directement depuis mon courtier via Zorro.

La stratégie a été trouvée en utilisant les barres EURUSD 15 min et lorsque j'ai codé dans Zorro pour les barres 15 min, il y a 29 568 trades contre 3902 pour SQs. Même si je change Zorro pour utiliser les barres de 1H, il y a toujours 2 fois plus de trades ... ce qui donne 7154 trades. Zorro 15 min et 60 min produisent des rendements annuels (pertes) de -14% et -15% respectivement alors que SQ X dit que chaque année a été une victoire et avec des facteurs de profit énormes.

Je peux comprendre de légères différences en utilisant les mêmes données, mais ces différences sont énormes. SQ affirme que son système est gagnant d'une année sur l'autre alors que Zorro affirme qu'il perd -14% par an.

Veuillez nous conseiller.

 

 

Pièces jointes :
Vous devez être connecté pour visualiser les fichiers joints.

0

Charles

Client, bbp_participant, communauté, 0 réponses.

Visiter le profil

il y a 5 ans #237338


//--------------------------------------------------------------------
// Pseudo-code source de la stratégie 0.850460
//
// Généré par StrategyQuant X Build 115 pour MetaTrader
// au 12/12/2018 01:03
//--------------------------------------------------------------------

//--------------------------------------------------------------------
// Paramètres de la stratégie
//--------------------------------------------------------------------
int MagicNumber = 11111 ;

Graphique principal = Symbole actuel / TF actuel

//--------------------------------------------------------------------
// Règle de trading : Signaux de trading (à l'ouverture de la barre)
//--------------------------------------------------------------------
LongEntrySignal = (CCI(Main chart,30)[2] est supérieur à 25.0) ;

ShortEntrySignal = (CCI(Main chart,30)[2] est inférieur à -25)
;

LongExitSignal = ((DeMarker(Main chart,40) change de direction vers le haut)
   et (Williams % R(Main chart,22) > -10.0)) ;

ShortExitSignal = ((DeMarker(Main chart,40) change de direction vers le bas)
   et (Williams % R(Main chart,22) < -90)) ;

//--------------------------------------------------------------------
// Règle de trading : Entrée longue (à l'ouverture de la barre)
//--------------------------------------------------------------------
if LongEntrySignal
{
    // Action #1
    Ouvrir un ordre Long au Marché ;
        Stop Loss = 2.3 * ATR(20) ;
        Profit objectif = 2.9 * ATR(20) ;

        Sortie après 18 barres ;

}

//--------------------------------------------------------------------
// Règle de trading : Entrée courte (à l'ouverture de la barre)
//--------------------------------------------------------------------
si (ShortEntrySignal
   and Not LongEntrySignal)
{
    // Action #1
    Ouvrir un ordre Short au marché ;
        Stop Loss = 2.3 * ATR(20) ;
        Profit objectif = 2.9 * ATR(20) ;

        Sortie après 18 barres ;

}

//--------------------------------------------------------------------
// Règle de trading : Sortie longue (à l'ouverture de la barre)
//--------------------------------------------------------------------
if ((LongExitSignal
   and Not LongEntrySignal)
   et (MarketPosition("Any", MagicNumber, "") is Long))
{
    // Action #1
    Fermer la position complète pour Symbol = Any et Magic Number = MagicNumber ;

}

//--------------------------------------------------------------------
// Règle de trading : Sortie courte (à l'ouverture de la barre)
//--------------------------------------------------------------------
if ((ShortExitSignal
   and Not ShortEntrySignal)
   and (MarketPosition("Any", MagicNumber, "") is Short))
{
    // Action #1
    Fermer la position complète pour Symbol = Any et Magic Number = MagicNumber ;

}

0

mabi

Client, bbp_participant, communauté, 261 réponses.

Visiter le profil

il y a 5 ans #237340

J'aimerais que ce soit si facile, mais ce n'est pas le cas. J'ai essayé d'utiliser SQ3 et Ninjatrader, mais cela n'a pas fonctionné non plus pour de trop nombreuses raisons. Alors restez avec MT4 jusqu'à ce qu'ils ajoutent le support pour Zorry ou vous allez juste perdre votre temps.

0

Charles

Client, bbp_participant, communauté, 0 réponses.

Visiter le profil

il y a 5 ans #237341

J'ai recodé de nombreuses stratégies ces derniers jours et elles échouent toutes.

Zorro est assez simple dans le codage car la plupart des écrous et des boulons sont faits pour vous. Je ne pense donc pas qu'il s'agisse d'un problème avec Zorro, je penche plutôt pour le fait que StrategyQuant ne génère pas de faux signaux ou est imprécis.

J'aimerais vraiment que les développeurs nous fassent part de leurs commentaires et qu'ils s'efforcent de résoudre ce problème !

0

Charles

Client, bbp_participant, communauté, 0 réponses.

Visiter le profil

il y a 5 ans #237342

Je viens de passer l'heure dernière à recoder une autre stratégie dont les règles sont très simples et elle échoue également.


//--------------------------------------------------------------------
// Pseudo-code source de la stratégie 0.899785
//
// Généré par StrategyQuant X Build 115 pour MetaTrader
// à 12/14/2018 01:23
//--------------------------------------------------------------------

//--------------------------------------------------------------------
// Paramètres de la stratégie
//--------------------------------------------------------------------
int MagicNumber = 11111 ;

Graphique principal = Symbole actuel / TF actuel

//--------------------------------------------------------------------
// Règle de trading : Signaux de trading (à l'ouverture de la barre)
//--------------------------------------------------------------------
LongEntrySignal = (ADX DI Minus(Main chart)[1] est en hausse) ;

ShortEntrySignal = (ADX DI Minus(Main chart)[1] est en baisse) ;

LongExitSignal = false ;

ShortExitSignal = false ;

//--------------------------------------------------------------------
// Règle de trading : Entrée longue (à l'ouverture de la barre)
//--------------------------------------------------------------------
if LongEntrySignal
{
    // Action #1
    Ouvrir un ordre Long à (Close(Main chart)[3] + (2 * ATR(Main chart,40)[1])) Stop ;
        Ordre valable pour 1 barre ;
        Stop Loss = 75.0 pips ;
        Objectif Profit = 195,0 pips ;

        Déplacer le SL à BE = 135.0 pips ;

        Sortie après 7 barres ;

}

//--------------------------------------------------------------------
// Règle de trading : Entrée courte (à l'ouverture de la barre)
//--------------------------------------------------------------------
si (ShortEntrySignal
   and Not LongEntrySignal)
{
    // Action #1
    Ouvrir un ordre Short à (Close(Main chart)[3] - (2 * ATR(Main chart,40)[1])) Stop ;
        Ordre valable pour 1 barre ;
        Stop Loss = 75 pips ;
        Objectif Profit = 195 pips ;

        Déplacer le SL à BE = 135 pips ;

        Sortie après 7 barres ;

}

//--------------------------------------------------------------------
// Règle de trading : Sortie longue (à l'ouverture de la barre)
//--------------------------------------------------------------------
if ((LongExitSignal
   and Not LongEntrySignal)
   et (MarketPosition("Any", MagicNumber, "") is Long))
{
    // Action #1
    Fermer la position complète pour Symbol = Any et Magic Number = MagicNumber ;

}

//--------------------------------------------------------------------
// Règle de trading : Sortie courte (à l'ouverture de la barre)
//--------------------------------------------------------------------
if ((ShortExitSignal
   and Not ShortEntrySignal)
   and (MarketPosition("Any", MagicNumber, "") is Short))
{
    // Action #1
    Fermer la position complète pour Symbol = Any et Magic Number = MagicNumber ;

}

0

Charles

Client, bbp_participant, communauté, 0 réponses.

Visiter le profil

il y a 5 ans #237343

Voici le code Zorro pour ceux qui veulent l'essayer eux-mêmes, le code SQ est ci-dessus. La stratégie SQ indique un Sharpe de 4,12, un facteur Profit de 3,82. Pas d'années perdantes. Pourtant, lorsque je l'exécute dans Zorro, elle affiche un rendement annuel de -18% PF 0,02 et un Sharpe de -0,69.

 


//--------------------------------------------------------------------
// Code source de la stratégie Zorro 0.899785
//
//--------------------------------------------------------------------

function run()
{
StartDate = 2010 ;
EndDate = 2015 ; // période de simulation fixe 2010-2015

BarPeriod = 15 ; //
LookBack = 200 ;
MaxLong = MaxShort = 1 ;

//--------------------------------------------------------------------
// Règle de trading : Signaux de trading (à l'ouverture de la barre)
//--------------------------------------------------------------------

/*
ADX(int TimePeriod) : var
Indice de mouvement directionnel moyen. Moyenne mobile de l'indicateur DX (voir ci-dessous). Utilise la série actuelle des prix des actifs. Ne prend pas en charge TimeFrame. Les valeurs retournées sont comprises entre 0 et 100.
*/

vars close = series ( priceClose() ) ;
vars mDI = series( MinusDI( 14 ) ) ;
var *atr = series( ATR( 40 ) ) ;

bool LongEntrySignal ;
bool ShortEntrySignal ;
bool LongExitSignal = false ;
bool ShortExitSignal = false ;

LongEntrySignal = mDI[1] > mDI[2] ;
ShortEntrySignal = mDI[1] < mDI[2] ;

//--------------------------------------------------------------------
// Règle de trading : Entrée longue (à l'ouverture de la barre)
//--------------------------------------------------------------------
if ( LongEntrySignal )
{
LifeTime = 7 ;
EntryTime = 1 ;
Stop = 75 * PIP ;
TakeProfit = 195 * PIP ;
Piste = 135 * PIP ;
TrailLock = 1 * PIP ;
Entry = close[3] + ( 2 * atr[1] ) ;
enterLong() ;

}

//--------------------------------------------------------------------
// Règle de trading : Entrée courte (à l'ouverture de la barre)
//--------------------------------------------------------------------
si ((ShortEntrySignal
et !LongEntrySignal))
{
// Action #1
LifeTime = 7 ;
EntryTime = 1 ;
Stop = 75 * PIP ;
TakeProfit = 195 * PIP ;
Piste = 135 * PIP ;
TrailLock = 1 * PIP ;
Entry = close[3] - ( 2 * atr[1] ) ;
enterShort() ;

}

plot("mDI", mDI, NEW, RED ) ;

}

0

tnickel

Customer, bbp_participant, community, sq-ultimate, 489 replies.

Visiter le profil

il y a 5 ans #237349

Veuillez joindre le fichier *.sqx

Nous pouvons donc faire un backtest mt4 et comparer les trades.

Si le strategyquant 4.x a un problème, le backtest metatrader est différent.

 

Thomas

https://monitortool.jimdofree.com/

0

Charles

Client, bbp_participant, communauté, 0 réponses.

Visiter le profil

il y a 5 ans #237351

Bonjour Tomas, Vous trouverez ci-joint la dernière stratégie postée ci-dessus.

Pièces jointes :
Vous devez être connecté pour visualiser les fichiers joints.

0

mabi

Client, bbp_participant, communauté, 261 réponses.

Visiter le profil

il y a 5 ans #237390

Cette stratégie échoue totalement lorsque je la teste dans SQX. Vérifiez la qualité de vos données ou vos paramètres.

Pièces jointes :
Vous devez être connecté pour visualiser les fichiers joints.

0

Affichage de 8 réponses de 1 à 8 (sur un total de 8)