Diablo - page 12

 

J'ai fait un Expert Advisor, qui passe des ordres comme dans la méthodologie de l'auteur, mais il y a des différences. Il place les ordres selon les niveaux en fonction de l'ATR (si la méthodologie est gagnant-gagnant, alors quelle différence cela fait-il de savoir quels niveaux placer). Au début d'une nouvelle journée, ferme et supprime tous les ordres (je ne sais pas comment fermer autrement des ordres qui n'ont pas de TP et SL et qui ne rapporteront pas de profit).

Vous pouvez essayer d'optimiser les paramètres. Je suis juste paresseux, je ne crois pas en cette stratégie.

Dossiers :
 
khorosh:
Lorsque la critique est trop paresseuse pour être raisonnée, mais que vous avez vraiment envie de dire quelque chose, il vaut mieux se taire que de s'acharner.
N'oubliez pas de vous regarder dans le miroir.
 

Diablo v09.02.12 (Version Immortelle)

Deux types d'ordres sont placés à une certaine distance du prix à intervalles égaux : les ordres droits (Stop d'achat à la hausse du prix et Stop de vente à la baisse du prix) et les ordres inversés (Limite de vente à la hausse du prix et Limite d'achat à la baisse du prix). Les ordres Buy Stop et Sell Limit sont placés aux mêmes niveaux (par paires), de même que les ordres Sell Stop et Buy Limit.

Tous les ordres ont le même volume et un Stop Loss égal à l'écart entre les ordres.

Les ordres directs (Buy Stop et Sell Stop) n'ont pas de Take Profit. Les ordres inversés (Limite de vente et Limite d'achat) ont un Take Profit arithmétiquement croissant : le premier ordre (le plus proche du prix) a un pas entre les ordres, le deuxième ordre (un peu plus éloigné) a trois pas, le troisième ordre a cinq pas et ainsi de suite.


Un script pour passer des commandes :

// Diablo v09.02.12
#property copyright "Jon Katana"
#property show_inputs
extern int Step=0,Spread=0,Levels=0;
extern double Up=0,Vol=0;
int start()
{for(int i=0;i<(Levels);i++)
{OrderSend(Symbol(),OP_BUYSTOP,Vol,Up+(i*Step+Spread)*Point,0,Up+(i-1)*Step*Point,0,0,0);
OrderSend(Symbol(),OP_SELLSTOP,Vol,Up-(i+1)*Step*Point,0,Up-(i*Step-Spread)*Point,0,0,0);
OrderSend(Symbol(),OP_SELLLIMIT,Vol,Up+i*Step*Point,0,Up+((i+1)*Step+Spread)*Point,Up-(Step*(i+1)+Spread)*Point,0,0);
OrderSend(Symbol(),OP_BUYLIMIT,Vol,Up-((i+1)*Step-Spread)*Point,0,Up-(i+2)*Step*Point,Up+i*Step*Point,0,0);}
return(0);}

Le système est totalement indestructible. Livré à lui-même, il finit toujours par clôturer avec un bénéfice ou à zéro.

La tendance sans repli sur la taille de l'étape est très bonne - le profit augmente comme une boule de neige, permettant de collecter un mouvement de prix plusieurs fois. Sur le plat, le bénéfice est modéré ou tombe à zéro. La variante la plus lente est le modèle "dragon", lorsque le prix se déplace dans une direction, mais recule d'un pas à partir de chaque niveau, puis va plus loin. Dans ce cas, il faudra juste un peu plus de temps pour atteindre le bénéfice ou le zéro.

Il faut donc calculer le pas entre les niveaux pour passer des ordres afin que le prix ne touche pas les niveaux déjà franchis par des mini-corrections.

Le système peut être laissé sans surveillance tant que le prix ne dépasse pas les niveaux où les ordres sont placés. Une autre variante consiste à suivre le Diablo et à le clôturer lorsqu'un certain profit (par exemple, la taille d'un pas) est atteint, avec une nouvelle réorganisation ultérieure des ordres, ou simplement une clôture unique avec profit.

 

Correction dans le script : il y avait un mauvais décalage sur le spread dans les ordres de vente limite:

// Diablo v13.02.12
#property copyright "Jon Katana"
#property show_inputs
extern int Step=0,Spread=0,Levels=0;
extern double Up=0,Vol=0;
int start()
{for(int i=0;i<(Levels);i++)
{OrderSend(Symbol(),OP_BUYSTOP,Vol,Up+(i*Step+Spread)*Point,0,Up+(i-1)*Step*Point,0,0,0);
OrderSend(Symbol(),OP_SELLSTOP,Vol,Up-(i+1)*Step*Point,0,Up-(i*Step-Spread)*Point,0,0,0);
OrderSend(Symbol(),OP_SELLLIMIT,Vol,Up+i*Step*Point,0,Up+((i+1)*Step+Spread)*Point,Up-(Step*(i+1)-Spread)*Point,0,0);
OrderSend(Symbol(),OP_BUYLIMIT,Vol,Up-((i+1)*Step-Spread)*Point,0,Up-(i+2)*Step*Point,Up+i*Step*Point,0,0);}
return(0);}
 

extern int Step=0,Spread=0,Levels=0 ;
extern double Up=0,Vol=0.

Quels paramètres dois-je mettre ici pour que cela fonctionne ?

 
Pourquoi ne pas affecter la variable UP à asc, afin que les commandes soient passées à partir du prix actuel.....
 
#property copyright "Jon Katana"
#property show_inputs
extern int Step=50,Spread=2,Levels=5;
extern double Up=0,Vol=0.1;
int TotalOrders,i;
int start()
{Up=Ask;
        TotalOrders=OrdersTotal();
        for (i=0; i<=TotalOrders; i++){
                 if (OrderSelect(0,SELECT_BY_POS)==true){
                    if (OrderType()==OP_BUY) OrderClose(OrderTicket(),OrderLots(),Bid,5,Red);
                    if (OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots(),Ask,5,Red);
                    if (OrderType()==OP_SELLSTOP) OrderDelete(OrderTicket(),Green);
                    if (OrderType()==OP_BUYSTOP) OrderDelete(OrderTicket(),Green);
                    if (OrderType()==OP_SELLLIMIT) OrderDelete(OrderTicket(),Green);
                    if (OrderType()==OP_BUYLIMIT) OrderDelete(OrderTicket(),Green);
                 
                 }
        }

for(int i=0;i<(Levels);i++)
{OrderSend(Symbol(),OP_BUYSTOP,Vol,Up+(i*Step+Spread)*Point,0,Up+(i-1)*Step*Point,0,0,0);
OrderSend(Symbol(),OP_SELLSTOP,Vol,Up-(i+1)*Step*Point,0,Up-(i*Step-Spread)*Point,0,0,0);
OrderSend(Symbol(),OP_SELLLIMIT,Vol,Up+i*Step*Point,0,Up+((i+1)*Step+Spread)*Point,Up-(Step*(i+1)-Spread)*Point,0,0);
OrderSend(Symbol(),OP_BUYLIMIT,Vol,Up-((i+1)*Step-Spread)*Point,0,Up-(i+2)*Step*Point,Up+i*Step*Point,0,0);}
return(0);
}
J'ai ajouté un nettoyage au script. C'est à dire que s'il y a des ordres ouverts ou en attente, il supprime d'abord tout et met ensuite les ordres en attente selon les paramètres...
 
IronBird:

extern int Step=0,Spread=0,Levels=0 ;
extern double Up=0,Vol=0

Quels paramètres doivent être saisis ici pour que cela fonctionne ?

Étape - étape entre les commandes en points (par exemple, 20 pour une commande à quatre chiffres ou 200 pour une commande à cinq chiffres) ;

Spread - écart en pips (par exemple, 2 pour quatre chiffres ou 20 pour cinq chiffres) ;

Niveaux - le nombre de niveaux auxquels les ordres seront placés (par exemple, 20) ;

Up - une ligne au-dessus du prix, à partir de laquelle le placement des ordres commencera vers le haut (les ordres seront placés automatiquement avec un décalage de Step par rapport à cette ligne) ;

Vol - volume des commandes (par exemple 0,1).

 
nikelodeon:
Pourquoi ne pas assigner la variable UP à asc, pour que les commandes soient passées à partir du prix actuel....

Pour deux raisons :

1) Les ordres ne peuvent pas être placés à partir d'un certain niveau (résistance, support, Fibonacci, Rabbit...)

2) Il y a des dizaines de commandes, et elles ne sont pas passées instantanément. Pendant ce temps, Ask peut s'écarter de la valeur initiale, ce qui déplace de manière imprévisible les lieux de passage des ordres et leurs Take Profit et Stop Loss. Cela permettra au centre de négociation d'ouvrir des ordres à des niveaux qui ne sont pas ceux d'une paire, mais de "tirer" des ordres distincts sans attraper le deuxième ordre de la paire, puis de les conduire à des pertes, ce qui détruirait tout le système.

 
JonKatana:

Pour deux raisons :

1) Les ordres ne peuvent pas être placés à partir d'un certain niveau (résistance, support, Fibonacci, Rabbit...)

2) Il y a des dizaines de commandes, et elles ne sont pas passées instantanément. Pendant ce temps, Ask peut s'écarter de la valeur initiale, ce qui déplace de manière imprévisible les lieux de passage des ordres et leurs Take Profit et Stop Loss. Cela permettra au centre de négociation d'ouvrir des ordres à des niveaux qui ne sont pas ceux d'une paire, mais de "tirer" des ordres distincts sans attraper le deuxième ordre de la paire, et de les conduire ensuite à des pertes, ce qui ruinera tout le système.

Vous pouvez définir les deux premiers ordres en utilisant le prix actuel et calculer les prix des autres ordres par rapport aux prix des premiers ordres. Les deux premiers ordres peuvent être des ordres de marché.
Raison: