Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Pas si facile à expliquer
Vous devez envoyer un événement au graphique hors ligne qui lui "dira" (à partir de votre indicateur) qu'un nouveau tick est généré et qu'il doit exécuter les routines requises. Cela signifie utiliser des fonctions de bas niveau. Le tout peut ressembler à quelque chose comme ceci :
#import "user32.dll"
int GetParent(int hWnd);
#import
#define CHART_CMD_UPDATE_DATA 33324
void UpdateChartWindows()
{
int filePeriod = 1; // file period
string fileSymbol = "your offline symbol name";
string chartName = "your offline symbol chart full name";
string stringForName = " ";
//
//
//
//
//
int windowHandle = WindowHandle(fileSymbol,filePeriod);
if (windowHandle != 0)
{
windowHandle = GetParent(windowHandle);
windowHandle = GetWindow(windowHandle,GW_HWNDFIRST);
while (windowHandle != 0)
{
int len = GetWindowTextA(windowHandle,stringForName,80);
if (len > 0 && StringSubstr(stringForName,0,len) == chartName)
PostMessageA(windowHandle,WM_COMMAND,CHART_CMD_UPDATE_DATA,0);
windowHandle = GetWindow(windowHandle,GW_HWNDNEXT);
}
}
}
Merci, je vais vérifier. Cependant, je trouve le problème pour envoyer correctement les ordres. Mon indicateur crée un nom pour le graphique hors ligne non standard et les plateformes ne l'ouvrent pas pour cette raison.
Merci pour votre disponibilité
Ok, le problème de la carte hors ligne est en cours.
J'ai un autre problème.
Je dois créer un indicateur qui calcule les volumes avec des règles spécifiques.
Ce dont j'ai besoin, c'est que chaque fois qu'il y a une variation de tick, l'indicateur doit compter la longueur du swing.
Exemple.
sur une bougie ouverte la valeur tampon est 0. Donc il doit compter tous les tick fait avant un retracement mais la valeur finale retournée est la plus haute depuis la fermeture de la bougie.
Ensuite, il doit mettre la couleur de l'histogramme rélettré le mouvement effectué de la plus haute plage retournée du buffer.
J'ai essayé de différentes manières mais sans succès.
Aidez-moi ^^.
Je vous remercie
Merci pour tout votre soutien. J'apprends de plus en plus et avec votre aide, je répare toutes mes demandes...MAIS.
J'en ai une autre^^.
J'ai besoin de créer une fonction void pour rappeler et il doit être la fusion de ces deux codes.
Le premier trouve la dernière commande ouverte et le second trouve le nombre de commandes ouvertes dont le prix d'ouverture est plus élevé.
J'ai besoin de faire une fonction pour avoir directement le numéro de l'ordre qui a le prix d'ouverture le plus élevé.
Merci pour votre aide.
OrderSelect(i, SELECT_BY_POS);
if(OrderSymbol() == Symbol() && OrderType() == TYPE ) {
if(TYPE == OP_BUY) {
double OPrice = OrderOpenPrice();[/PHP]
[PHP]for(int e=0;e<OrdersTotal();e++) {
if(OrderSelect(e,SELECT_BY_POS,MODE_TRADES)==false ) break;
if(OrderSymbol() == Symbol() && OrderType() == TYPE) {
if(TYPE == OP_BUY) {
if(OrderOpenPrice()>test(OP_BUY) Hbuys++;
}
}
}
return(Hbuys);
}
Merci pour tout votre soutien. J'apprends de plus en plus et avec votre aide, j'ai résolu toutes mes demandes...MAIS.
J'en ai une autre^^.
J'ai besoin de créer une fonction void à rappeler et elle doit être la fusion de ces deux codes.
Le premier trouve la dernière commande ouverte et le second le nombre de commandes ouvertes dont le prix d'ouverture est le plus élevé.
J'ai besoin de faire une fonction pour avoir directement le numéro de l'ordre qui a le prix d'ouverture le plus élevé.
Merci pour votre aide.
OrderSelect(i, SELECT_BY_POS);
if(OrderSymbol() == Symbol() && OrderType() == TYPE ) {
if(TYPE == OP_BUY) {
double OPrice = OrderOpenPrice();[/PHP]
if(OrderSelect(e,SELECT_BY_POS,MODE_TRADES)==false ) break;
if(OrderSymbol() == Symbol() && OrderType() == TYPE) {
if(TYPE == OP_BUY) {
if(OrderOpenPrice()>test(OP_BUY) Hbuys++;
}
}
}
return(Hbuys);
}
J'ai fait une erreur sur le deuxième code. C'est bien
[PHP]for(int e=0;e<OrdersTotal();e++) {
if(OrderSelect(e,SELECT_BY_POS,MODE_TRADES)==false ) break ;
if(OrderSymbol() == Symbol() && OrderType() == TYPE) {
if(TYPE == OP_BUY) {
if(OrderOpenPrice()>OPrice Hbuys++ ;
}
}
}
return(Hbuys) ;
}
dasio
Une fonction void est une fonction qui ne renvoie aucune valeur. Si c'est le cas, la seule façon raisonnable de le faire est d'utiliser une variable qui sera transmise par référence à la fonction (d'après mon expérience, l'utilisation de variables de portée globale à cette fin est une très mauvaise pratique - elle évite les règles de codage structurées et, dans les cas où une erreur doit être recherchée, c'est un cauchemar lorsque de telles variables sont utilisées). C'est ce que vous aviez à l'esprit ?
J'ai fait une erreur sur le deuxième code. C'est juste
if(OrderSelect(e,SELECT_BY_POS,MODE_TRADES)==false ) break;
if(OrderSymbol() == Symbol() && OrderType() == TYPE) {
if(TYPE == OP_BUY) {
if(OrderOpenPrice()>OPrice Hbuys++;
}
}
}
return(Hbuys);
}
dasio La fonction void est une fonction qui ne renvoie aucune valeur. Si c'est le cas, la seule façon raisonnable de le faire est d'utiliser une variable qui sera transmise par référence à la fonction (d'après mon expérience, l'utilisation de variables de portée globale à cette fin est une très mauvaise pratique - elle évite les règles de codage structurées et, dans les cas où une erreur doit être recherchée, c'est un cauchemar lorsque de telles variables sont utilisées). C'est ce que vous aviez en tête ?
Merci pour votre réponse,
Je n'ai besoin que du nombre d'achats qui ont l'ordre d'ouverture le plus élevé et l'ordre d'ouverture le plus bas par rapport au dernier ordre d'achat ouvert.
Je dois utiliser le résultat comment moltiplier dans une fonction vois pour une certaine vérification.
Il est donc beaucoup plus simple de rappeler cet enregistrement sur demande. Peut-être de cette façon, je peux le rappeler simplement CalculateCurrentBuy(Symbol())
int Hopen=0;
for(int i=0;i<OrdersTotal();i++) {
code here
}
}
return(Hopen);
}
grille de suivi ?
{
if(Set.SELLSTOP && s.ticketP==0){
OrderSend(Symbol(),OP_SELLSTOP,Sell.Lots+i*Sell.Multiplier,Ask-i*(Trail.SELLSTOP.Orders.Distance)*myPoint,0,0,0,0,0,0,CLR_NONE);}
if(Set.BUYSTOP && b.ticketP==0){
OrderSend(Symbol(),OP_BUYSTOP,Buy.Lots+i*Buy.Multiplier,Bid+i*(Trail.BUYSTOP.Orders.Distance)*myPoint,0,0,0,0,0,0,CLR_NONE);}
}[/CODE]
I can set a grid using the above code but how do I get the Buy Grid and Sell grid grid to trail independently or as a set and retain the separate grid spacing? I have tried all sorts of things and must be missing something obvious. All I get is either all the pending orders move to the same level and then trail as a group or the pending orders start moving up and down with the price action.
[CODE] void TrailingOrders() {
if (Trail.BUYSTOP.Orders && OrderType()==OP_BUYSTOP) {
if (OrderOpenPrice()-Ask>(Trail.BUYSTOP.Orders.Distance)*myPoint) {
OrderModify(OrderTicket(),Ask+OrderOpenPrice()+(Trail.BUYSTOP.Orders.Distance)*myPoint,OrderStopLoss(),OrderTakeProfit(), 0, Aqua);
}
}
if (Trail.SELLSTOP.Orders && OrderType()==OP_SELLSTOP) {
if (Bid-OrderOpenPrice()>(Trail.SELLSTOP.Orders.Distance)*myPoint) {
OrderModify(OrderTicket(),Bid-OrderOpenPrice()-(Trail.SELLSTOP.Orders.Distance)*myPoint,OrderStopLoss(),OrderTakeProfit(), 0, Yellow);
}
}
}Ce code suivra 2 ordres mais comment puis-je le modifier pour en suivre plus ? Dès que j'essaie de configurer le code de suivi pour plusieurs niveaux, comme le code de la grille ci-dessus, il se transforme en crème pâtissière.
Tout commentaire serait apprécié.
Salutations CJA
...
cja
J'ai essayé avec le code suivant et cela fonctionne bien (voir l'image d'exemple : différentes étapes déjà appliquées)
Je ne savais pas à quoi servaient les variables s.ticketP et b.ticketP, je les ai donc utilisées de la façon dont vous pouvez le voir dans le code.
extern double Trail.BUYSTOP.Orders.Distance = 20;
extern int Stop.Order.Levels = 4;
extern double Sell.Lots = 0.1;
extern double Sell.Multiplier = 0.1;
extern double Buy.Lots = 0.1;
extern double Buy.Multiplier = 0.2;
extern bool Set.SELLSTOP = true;
extern bool Set.BUYSTOP = true;
int init()
{
return(0);
}
int start()
{
double myPoint=1; if (Digits==3 || Digits==5) myPoint=10; myPoint *= Point;
static int s.ticketP=0;
static int b.ticketP=0;
for(int i = 1; i < Stop.Order.Levels+1; i++)
{
if(Set.SELLSTOP && s.ticketP==0){ OrderSend(Symbol(),OP_SELLSTOP,Sell.Lots+i*Sell.Multiplier,Bid-i*(Trail.SELLSTOP.Orders.Distance)*myPoint,0,0,0,0,0,0,CLR_NONE);}
if(Set.BUYSTOP && b.ticketP==0){ OrderSend(Symbol(),OP_BUYSTOP ,Buy.Lots+i *Buy.Multiplier ,Ask+i*(Trail.BUYSTOP.Orders.Distance)*myPoint ,0,0,0,0,0,0,CLR_NONE);}
}
s.ticketP=Stop.Order.Levels;
b.ticketP=Stop.Order.Levels;
return(0);
}
{
if(Set.SELLSTOP && s.ticketP==0){
OrderSend(Symbol(),OP_SELLSTOP,Sell.Lots+i*Sell.Multiplier,Ask-i*(Trail.SELLSTOP.Orders.Distance)*myPoint,0,0,0,0,0,0,CLR_NONE);}
if(Set.BUYSTOP && b.ticketP==0){
OrderSend(Symbol(),OP_BUYSTOP,Buy.Lots+i*Buy.Multiplier,Bid+i*(Trail.BUYSTOP.Orders.Distance)*myPoint,0,0,0,0,0,0,CLR_NONE);}
}[/CODE]
I can set a grid using the above code but how do I get the Buy Grid and Sell grid grid to trail independently or as a set and retain the separate grid spacing? I have tried all sorts of things and must be missing something obvious. All I get is either all the pending orders move to the same level and then trail as a group or the pending orders start moving up and down with the price action.
[CODE] void TrailingOrders() {
if (Trail.BUYSTOP.Orders && OrderType()==OP_BUYSTOP) {
if (OrderOpenPrice()-Ask>(Trail.BUYSTOP.Orders.Distance)*myPoint) {
OrderModify(OrderTicket(),Ask+OrderOpenPrice()+(Trail.BUYSTOP.Orders.Distance)*myPoint,OrderStopLoss(),OrderTakeProfit(), 0, Aqua);
}
}
if (Trail.SELLSTOP.Orders && OrderType()==OP_SELLSTOP) {
if (Bid-OrderOpenPrice()>(Trail.SELLSTOP.Orders.Distance)*myPoint) {
OrderModify(OrderTicket(),Bid-OrderOpenPrice()-(Trail.SELLSTOP.Orders.Distance)*myPoint,OrderStopLoss(),OrderTakeProfit(), 0, Yellow);
}
}
}Ce code va suivre 2 commandes mais comment puis-je le modifier pour en suivre plus ? Dès que j'essaie de configurer le code de suivi pour plusieurs niveaux, comme le code de la grille ci-dessus, il se transforme en crème pâtissière.
Tout commentaire serait apprécié.
Salutations CJAGrille de queue
cja
Je l'ai essayé avec le code suivant et cela fonctionne bien (voir l'image d'exemple : différentes étapes déjà appliquées)
Je ne savais pas à quoi servaient les variables s.ticketP et b.ticketP et je les ai donc utilisées de la façon dont vous pouvez le voir dans le code.
extern double Trail.BUYSTOP.Orders.Distance = 20;
extern int Stop.Order.Levels = 4;
extern double Sell.Lots = 0.1;
extern double Sell.Multiplier = 0.1;
extern double Buy.Lots = 0.1;
extern double Buy.Multiplier = 0.2;
extern bool Set.SELLSTOP = true;
extern bool Set.BUYSTOP = true;
int init()
{
return(0);
}
int start()
{
double myPoint=1; if (Digits==3 || Digits==5) myPoint=10; myPoint *= Point;
static int s.ticketP=0;
static int b.ticketP=0;
for(int i = 1; i < Stop.Order.Levels+1; i++)
{
if(Set.SELLSTOP && s.ticketP==0){ OrderSend(Symbol(),OP_SELLSTOP,Sell.Lots+i*Sell.Multiplier,Bid-i*(Trail.SELLSTOP.Orders.Distance)*myPoint,0,0,0,0,0,0,CLR_NONE);}
if(Set.BUYSTOP && b.ticketP==0){ OrderSend(Symbol(),OP_BUYSTOP ,Buy.Lots+i *Buy.Multiplier ,Ask+i*(Trail.BUYSTOP.Orders.Distance)*myPoint ,0,0,0,0,0,0,CLR_NONE);}
}
s.ticketP=Stop.Order.Levels;
b.ticketP=Stop.Order.Levels;
return(0);
}
Bonjour mladen,
Merci pour votre aide, mais je n'ai peut-être pas été très clair dans mon message ci-dessus. Je n'ai pas de problème pour mettre en place une grille, le problème que j'ai est de suivre la grille sans perdre la séparation des ordres.
s.ticketP et b.ticketP font simplement référence aux codes d'ordres en attente BUYSTOP et SELLSTOP utilisés ailleurs dans l'EA.
Salutations CJA
Grille de suivi
Bonjour mladen,
Merci pour votre aide, mais je n'ai peut-être pas été très clair dans mon message ci-dessus. Je n'ai aucun problème à mettre en place une grille, le problème que j'ai est de suivre la grille sans perdre la séparation des ordres.
s.ticketP & b.ticketP se réfèrent simplement au code des ordres en attente BUYSTOP & SELLSTOP utilisés ailleurs dans l'EA.
Salutations CJABonjour mladen,
Vous avez le temps d'y jeter un coup d'oeil ?
Amicalement vôtre CJA