Demandez ! - page 173

 

Comment résoudre l'absence de structure de données de type mixte ?

codersguru:
Bonjour à tous,

J'ai reçu beaucoup de messages privés me demandant de l'aide pour certains morceaux de code.

Ici vous pouvez poster vos questions relatives à MQL4, et je ferai de mon mieux pour y répondre.

Bonjour,

J'aimerais profiter de votre invitation pour poser le problème suivant.

Quelle serait la meilleure solution pour stocker et trier une liste de symboles en fonction de leurs variations de prix puisqu'on ne peut pas utiliser une structure de données de type mixte comme : EURUSD->1.29, USDGBP->0.22 ?

Il n'y a pas d'enum et il n'y a pas de structures de données de type mixte qui peuvent contenir une chaîne de caractères et une valeur double associée dans mql4. Les solutions auxquelles je pense sont soit d'utiliser un fichier, mais cela nécessiterait une activité presque constante de lecture et d'écriture sur le disque. Ou bien d'utiliser trois tableaux : un pour la liste des symboles, un pour le stockage et le suivi des valeurs de l'index et un pour les valeurs réelles.

Il semble que l'on doive coder autour d'un problème très basique (simple). La seule chose que je voudrais est de comparer toutes les paires d'euros entre elles pour la force relative. Comment résoudriez-vous ce problème, quelle structure de données recommanderiez-vous ?

Merci pour toute réponse ou indication à ce débutant !

Bibberpool

 

Recherche d'indicateurs de force relative et de corrélation

liverpool:
Bonjour,

Quelle serait la meilleure solution pour stocker et trier une liste de symboles en fonction de leurs variations de prix, étant donné que l'on ne peut pas utiliser une structure de données de type mixte comme : EURUSD->1.29, USDGBP->0.22 ?

...

Il semble que l'on doive coder autour d'un problème très basique (simple). La seule chose que je voudrais est de comparer toutes les paires d'euros entre elles pour la force relative. Comment résoudriez-vous ce problème, quelle structure de données recommanderiez-vous ?

Merci pour toute réponse ou indication à ce débutant ! Bibberpool

Bonjour Bibberpool,

Cherchez sur ce site Forex TSD les indicateurs de force relative et les indicateurs de corrélation...

Ces types d'indicateurs sont conçus pour analyser différentes paires et prix et leurs forces relatives.

Vous pouvez trouver de bons exemples pour ce que vous voulez faire.

J'espère que cela vous aidera,

Robert

 

Merci pour votre réponse

cosmiclifeform:
Salut Bibberpool,

Cherchez sur ce site Forex TSD les indicateurs de force relative et les indicateurs de corrélation...

Ces types d'indicateurs sont conçus pour analyser différentes paires et prix et leurs forces relatives.

Vous trouverez peut-être de bons exemples pour ce que vous voulez faire.

J'espère que cela vous aidera,

Robert

Bonjour, je vous remercie pour votre réponse et je vais certainement rechercher les fils de discussion suggérés. Cependant, il y a tellement de code autour.

En attendant, j'ai fait un court prototype en C. J'ai juste pris un tri d'insertion de base puisque les données ne sont constituées que de petits ensembles et j'ai mis à jour cette routine pour mettre à jour un tableau de chaînes en conséquence.

Je vais (copier/coller) le porter dans mon premier programme mql4 plus tard dans la semaine. Voici le code, peut-être qu'il sera utile à d'autres ou que quelqu'un voudra le commenter pour créer quelque chose de mieux.

#include

int main(void) {

int max = 5;

int array[5] = { 3, 5, 2, 1, 4 };

char *symbl[5] = { "EURUSD", "EURGBP", "EURJPY", "EURCHF", "EURCAD" };

int idx = 0;

int swp = 0;

int tmp = 0;

char *tmpsymb = NULL;

printf("--- before\n");

for(idx = 0; idx <= max - 1; idx++) {

printf("%d - %s\n", array, symbl);

}

for(idx = 1 ; idx <= max - 1; idx++) {

swp = idx;

while(swp > 0 && array[swp] < array[swp - 1]) {

tmp = array[swp];

tmpsymb = symbl[swp];

array[swp] = array[swp - 1];

symbl[swp] = symbl[swp - 1];

array[swp - 1] = tmp;

symbl[swp - 1] = tmpsymb;

swp--;

}

}

printf("--- after\n");

for(idx = 0; idx <= max - 1; idx++) {

printf("%d - %s\n", array, symbl);

}

return 0;

}

le programme doit imprimer :

--- avant

3 - EURUSD

5 - EURGBP

2 - EURJPY

1 - EURCHF

4 - EURCAD

--- après

1 - EURCHF

2 - EURJPY

3 - EURUSD

4 - EURCAD

5 - EURGBP

 

Recherche d'indépendants de l'auteur Kravchuk

Bonjour à tous,

Je suis à la recherche d'indies de l'auteur Kravchuk, qui conçoit des indies à vendre. J'étais prêt à acheter mais nous n'arrivons pas à nous mettre d'accord sur le mode de paiement (pas le montant ! ?). Est-ce que quelqu'un a ses indies ft.dejavu, ft.rainbow,barstatline,diver,linerenko ? J'apprécierais votre aide. Je vous remercie.

 
bershk:
Salut la Communauté, je cherche des indies de l'auteur Kravchuk, qui conçoit des indies pour vendre. J'étais prêt à les acheter mais nous ne pouvons pas nous mettre d'accord sur la forme de paiement (pas le montant !?). Est-ce que quelqu'un a ses indies ft.dejavu, ft.rainbow, barstatline, diver, linerenko ? J'apprécierais votre aide. Je vous remercie.

Bonjour bershk,

Si votre demande n'est pas encore obsolète, nous pouvons vous aider ici - nous avons travaillé avec certains de ces indicateurs.

Veuillez noter que vous devez acheter la licence auprès de l'auteur et que nous ne fournissons pas d'éléments décompilés ou obtenus illégalement.

Si vous êtes intéressé à acheter - voici les prix actuels de l'auteur :

Dejavu - $20 ; Rainbow - $15 ; Barstatline - $10 ; Diver - $20 ; LineRenko - $15.

Si vous avez besoin d'aide pour les acheter, écrivez-nous à info@raitsoft.com, nous vous aiderons à acheter la licence sans aucune commission.

 

bonjour les amis ...................

j'ai commencé à apprendre à programmer en mql4, et pour commencer j'analyse les indicateurs et les ea.

J'ai l'indicateur "daily_close _line" et j'ai regardé le code et j'ai trouvé ces deux lignes de code dont je n'ai aucune idée de ce qu'elles font et comment elles fonctionnent.

Je n'ai aucune idée de ce qu'elles font et de comment elles fonctionnent.

Merci beaucoup par avance.

eran

//*

//* my_DailyOpen_indicator

//*

//* Revision 1.1 2005/11/13 Midnite

//* Initial DailyOpen indicator

//* based pm

//*

#property copyright "Midnite"

#property link "me@home.net"

#property indicator_chart_window

#property indicator_buffers 1

#property indicator_color1 DodgerBlue

#property indicator_style1 2

#property indicator_width1 1

double TodayOpenBuffer[];

extern int TimeZoneOfData= 0;

//+------------------------------------------------------------------+

//| Custom indicator initialization function |

//+------------------------------------------------------------------+

int init()

{

SetIndexStyle(0,DRAW_LINE);

SetIndexBuffer(0,TodayOpenBuffer);

SetIndexLabel(0,"Open");

SetIndexEmptyValue(0,0.0);

return(0);

}

//+------------------------------------------------------------------+

//| Custor indicator deinitialization function |

//+------------------------------------------------------------------+

int deinit()

{

return(0);

}

//+------------------------------------------------------------------+

//| Custom indicator iteration function |

//+------------------------------------------------------------------+

int start()

{

int lastbar;

int counted_bars= IndicatorCounted();

if (counted_bars>0) counted_bars--;

lastbar = Bars-counted_bars;

DailyOpen(0,lastbar);

return (0);

}

//+------------------------------------------------------------------+

//| |

//+------------------------------------------------------------------+

int DailyOpen(int offset, int lastbar)

{

int shift;

int tzdiffsec= TimeZoneOfData * 3600;

double barsper30= 1.0*PERIOD_M30/Period();

bool ShowDailyOpenLevel= True;//<<<<---------- thise line-------------------------------

// lastbar+= barsperday+2; // make sure we catch the daily open

lastbar= MathMin(Bars-20*barsper30-1, lastbar);//<<<<-------------------thise line-----------------------

for(shift=lastbar;shift>=offset;shift--){

TodayOpenBuffer[shift]= 0;

if (ShowDailyOpenLevel){

if(TimeDay(Time[shift]-tzdiffsec) != TimeDay(Time[shift+1]-tzdiffsec)){ // day change

TodayOpenBuffer[shift]= Open[shift];

TodayOpenBuffer[shift+1]= 0; // avoid stairs in the line

}

else{

TodayOpenBuffer[shift]= TodayOpenBuffer[shift+1];

}

}

}

return(0);

}
 

ERAN123

Il fait ce qui suit : il trouve le prix d'ouverture quotidien (en prenant en compte TimeZoneOfData comme décalage de fuseau horaire) et trace cette ligne tout au long de la journée. Voici une image sur laquelle il est facile de voir comment il trace le même prix d'ouverture quotidien tout au long de la journée :

ERAN123:
j'ai commencé à apprendre à programmer en mql4, et pour commencer, j'analyse les idicateurs et les ea.

J'ai l'indicateur "daily_close _line" et j'ai regardé le code et j'ai trouvé ces deux lignes de code dont je n'ai aucune idée de ce qu'elles font et comment elles fonctionnent.

Je n'ai aucune idée de ce qu'elles font et comment elles fonctionnent.

Merci beaucoup par avance.

eran

//*

//* my_DailyOpen_indicator

//*

//* Revision 1.1 2005/11/13 Midnite

//* Initial DailyOpen indicator

//* based pm

//*

#property copyright "Midnite"

#property link "me@home.net"

#property indicator_chart_window

#property indicator_buffers 1

#property indicator_color1 DodgerBlue

#property indicator_style1 2

#property indicator_width1 1

double TodayOpenBuffer[];

extern int TimeZoneOfData= 0;

//+------------------------------------------------------------------+

//| Custom indicator initialization function |

//+------------------------------------------------------------------+

int init()

{

SetIndexStyle(0,DRAW_LINE);

SetIndexBuffer(0,TodayOpenBuffer);

SetIndexLabel(0,"Open");

SetIndexEmptyValue(0,0.0);

return(0);

}

//+------------------------------------------------------------------+

//| Custor indicator deinitialization function |

//+------------------------------------------------------------------+

int deinit()

{

return(0);

}

//+------------------------------------------------------------------+

//| Custom indicator iteration function |

//+------------------------------------------------------------------+

int start()

{

int lastbar;

int counted_bars= IndicatorCounted();

if (counted_bars>0) counted_bars--;

lastbar = Bars-counted_bars;

DailyOpen(0,lastbar);

return (0);

}

//+------------------------------------------------------------------+

//| |

//+------------------------------------------------------------------+

int DailyOpen(int offset, int lastbar)

{

int shift;

int tzdiffsec= TimeZoneOfData * 3600;

double barsper30= 1.0*PERIOD_M30/Period();

bool ShowDailyOpenLevel= True;//<<<<---------- thise line-------------------------------

// lastbar+= barsperday+2; // make sure we catch the daily open

lastbar= MathMin(Bars-20*barsper30-1, lastbar);//<<<<-------------------thise line-----------------------

for(shift=lastbar;shift>=offset;shift--){

TodayOpenBuffer[shift]= 0;

if (ShowDailyOpenLevel){

if(TimeDay(Time[shift]-tzdiffsec) != TimeDay(Time[shift+1]-tzdiffsec)){ // day change

TodayOpenBuffer[shift]= Open[shift];

TodayOpenBuffer[shift+1]= 0; // avoid stairs in the line

}

else{

TodayOpenBuffer[shift]= TodayOpenBuffer[shift+1];

}

}

}

return(0);

}
Dossiers :
daly_open.gif  30 kb
 
mladen:
ERAN123

Il fait ce qui suit : il trouve le prix d'ouverture quotidien (en prenant en compte TimeZoneOfData comme décalage de fuseau horaire) et trace cette ligne tout au long de la journée. Voici une image sur laquelle il est facile de voir comment il trace le même cours d'ouverture quotidien tout au long de la journée :

sory i mente this line :

double barsper30= 1.0*PERIOD_M30/Period() ;

et celle-ci aussi.

lastbar= MathMin(Bars-20*barsper30-1, lastbar) ;

pour quoi le "20" et "-1" et comment les 2 lignes fonctionnent ensemble ?

Merci beaucoup.

 

J'ai écrit autre chose à l'origine.

Oubliez ces lignes : elles sont, pour une raison quelconque, en train d'essayer de limiter le début du calcul des valeurs (et cela devrait être quelques heures après la barre la plus ancienne du graphique). Ce que le codeur voulait réaliser avec ces lignes n'est peut-être connu que de lui seul.

ERAN123:
Désolé, j'ai oublié cette ligne :

double barsper30= 1.0*PERIOD_M30/Period() ;

et celle-ci aussi.

lastbar= MathMin(Bars-20*barsper30-1, lastbar) ;

pour quoi le "20" et "-1" et comment les 2 lignes fonctionnent ensemble ?

Merci beaucoup.
 

Merci beaucoup à mon ami .....you qui m'a aidé.