Comment coder ? - page 233

 
CoeyCoey:
Bonjour à tous,

Je travaille sur la modification d'un compteur de force de devise pour montrer la force de la devise basée sur le temps du graphique. Actuellement, le code utilisé est le suivant :

aHigh = MarketInfo(mySymbol,MODE_HIGH); // set a high today

aLow = MarketInfo(mySymbol,MODE_LOW); // set a low today

aBid = MarketInfo(mySymbol,MODE_BID); // set a last bid

aAsk = MarketInfo(mySymbol,MODE_ASK);

Je comprends que MODE_HIGH et MODE_LOW obtiennent les hauts et les bas du jour. Comment pourrais-je obtenir le haut et le bas de l'intervalle de temps actuel du graphique à la place ?

Merci !

P.S. Je ne suis pas un programmeur, alors utilisez des petits mots s'il vous plaît :)

Vous n'êtes pas obligé d'utiliser MarketInfo(). Si vous voulez obtenir le haut actuel, utilisez High[0] et Low[n], Close[n], Open[n]. n' signifie le décalage par rapport à la barre actuelle. Par exemple, pour obtenir le haut de la barre qui précède la barre actuelle, vous pouvez utiliser High[1] puisque la barre actuelle est égale à 0 et que la barre qui la précède a un décalage de 1 par rapport à la barre actuelle.

Pour vérifier les hauts, les bas, les ouvertures et les fermetures d'autres horizons temporels que ceux que vous visualisez sur le graphique, vous pouvez utiliser les fonctions iHigh(), iLow(), iClose() et iOpen.

Exemple d'utilisation ci-dessous.

double high_of_gbpusd_4hours_current = iHigh("gbpusd", period_h4, 0) ;

 

Merci ! Vous êtes super !

 
mfurlend:

Je pense avoir réussi à le faire fonctionner (je n'en suis pas sûr ??), mais pour une raison quelconque, le tableau est rempli de nombreuses valeurs '0' en plus des valeurs légitimes.

Voici comment je procéderais :

#define TICKET 0

#define PRICES 1

double ResumeArray[0,2];

int CheckForResume()

{

ResumeCheck = TimeLocal()+(PERIOD_M1*60)*5;

bool success = false;

int k;

for (int i = 0; i<OrdersTotal();i++)

{

if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES))continue;

if (OrderType() > OP_SELL || OrderProfit()> Cutoff)continue;

int arraycount=ArrayRange(ResumeArray,TICKET);

bool found = false;

for (k=arraycount-1; k>=0; k--)

{

if (ResumeArray[k,TICKET] == OrderTicket())

{

found = true;

if (ResumeArray[k,PRICES] + Cutoff < OrderProfit())break;

else

{

success=true;

Print ("ELSE");

ResumeArray[k,PRICES] = OrderProfit();

break;

}

}

}

if (found == false)

{

arraycount = ArrayResize(ResumeArray,arraycount+1)/2;

ResumeArray[arraycount-1,TICKET] = OrderTicket();

ResumeArray[arraycount-1,PRICES] = OrderProfit();

success=true;

}

}

if(success)return (1);

else return(0);

}

Vous n'êtes pas obligé d'utiliser les définitions TICKET et PRICES, je les ai juste incluses pour montrer comment fonctionne un tableau à 2 dimensions. Remplacez simplement toutes les occurrences de TICKET et PRICES par 0 et 1 respectivement.

J'ai remplacé les commandes 'return' dans la boucle 'for' par 'break', ainsi tous les ordres ouverts seront traités.

Une chose à noter est que les ordres fermés ne sont jamais retirés du tableau, donc il continuera à croître en taille, et ralentira votre plateforme.

d4v3

 

Limite de l'historique des barres

Je serais très reconnaissant si quelqu'un pouvait ajouter l'option de limite de barres à ce script RenkoLiveChart_v3.2.

Il prend trop de ressources informatiques.

Dossiers :
 

EA d'alerte de base

................ [résolu] ....................

 

réduction du bruit

Bonjour à tous - J'ai cherché un moyen de limiter le bruit sur une transaction et de faire une coupure plus rapide.

L'idée est en fait assez simple

Le bruit est montré dans cette image, il est dynamique, ce qui signifie qu'il change constamment pour s'adapter aux conditions du marché.

Voici un code que j'ai créé pour la clôture, si quelqu'un veut l'utiliser, n'hésitez pas, il faut juste y ajouter quelques multiplicateurs.

int profit = OrderProfit() + OrderSwap() + OrderCommission() ;

int Trades = ScanTrades(0,0);

if (Trades == 0) TS1 = 0 ;

si ((ScanTrades(2,0) > 0) && (profit < 0)) TS= ((MarketInfo(Symbol(),MODE_BID)) + bruit + Slippage) ;

si ((ScanTrades(2,0) > 0) && (profit > 0)) TS= ((MarketInfo(Symbol(),MODE_BID)) + bruit ) ;

si ((ScanTrades(1,0) > 0) && (profit < 0)) TS= ((MarketInfo(Symbol(),MODE_BID)) - bruit - Slippage) ;

si ((ScanTrades(1,0) > 0) && (profit > 0)) TS= ((MarketInfo(Symbol(),MODE_BID)) - bruit ) ;

//short

si ((ScanTrades(2,0) > 0)&& (TS1 ==0 )) TS1 = TS ;

si ((ScanTrades(2,0) > 0)&& (TS < TS1)) TS1 = TS ;

si ((ScanTrades(2,0) > 0) && (MarketInfo(Symbol(),MODE_BID) > TS1)) CloseOrder(2) ;

//long

si ((ScanTrades(1,0) > 0)&& (TS1 ==0 )) TS1 = TS ;

si ((ScanTrades(1,0) > 0)&& (TS > TS1)) TS1 = TS ;

si ((ScanTrades(1,0) > 0) && (MarketInfo(Symbol(),MODE_BID) < TS1)) CloseOrder(1) ;

Quelle serait la meilleure façon d'obtenir le haut et le bas actuels et précédents d'un graphique à barres ? J'ai besoin de créer la variable "noise".

J'ai essayé de le faire, mais c'est aléatoire, t1 et l1 sont parfois à 0. C'est le plus déprimant, car c'est tout ce qui sépare l'ensemble de l'ea de la fin, si tant est que cela existe.

double hh2=High ;

double ll2=Low ;

double hh3=High ;

double ll3=Low ;

double t1,l1,noise ;

//bruit = chevauchement des barres précédentes

si ((hh2 - hh3) > 0 ) t1 =(hh3) ; //en gros, on choisit la barre "haute" la plus basse entre les deux -bullish

si ((hh3- hh2) > 0 ) t1=(hh2) ; //baissier

si ((ll2 - ll3) > 0 ) l1 =(ll2) ; //choisir la barre la plus basse la plus haute pour une tendance haussière

si ((ll3-ll2) > 0 ) l1=(ll3) ; //baissier

bruit =(t1-l1) ;

Print("t1 = ",t1," ; l1 = ",l1) ;

les résultats typiques de l'impression sont t1=0 l1=94.3 le plus ennuyeux c'est que hh2 et hh3 sont == je ne sais juste pas quoi faire je ne vois pas de problème avec mon code.

Dossiers :
cutoff.jpg  5 kb
 

qui peut m'aider ?

quelqu'un peut-il me montrer comment créer un nouvel indicateur qui est basé sur 3 indicateurs connus ? Je fais une stratégie basée sur 3 indicateurs qui montrent des signaux d'achat/vente très forts, mais je veux créer un indicateur...

 

Modification de l'ea, s'il vous plaît

Veuillez m'aider à mettre en œuvre les modifications suivantes sur cette ea

1)Ajouter en heure

A) indicateur fisher_ 11 avec les paramètres 33,0.5,0.5

B) indicateur tcf smoothed paramètres 17, 8, 0.7

c) Je veux aussi que l'indicateur dinap _basic n'autorise pas les transactions lorsqu'il a tiré à l'encontre de la direction du signal, c'est-à-dire que s'il tire vers le haut, l'entrée de signaux d'achat n'est pas autorisée, s'il tire vers le bas, l'entrée de signaux de vente n'est pas autorisée.

2) Ajouter en 15 minutes

A) Indicateur supertrend

B) Indicateur Trendlord

Money management de

1) Ouvrez 2 trades à 3 % stop loss du total du compte ( 1.5% )chacun

2) Un à 80 pips take profit ou 2.2 % et le second à 3.8% take profit

3) Doublez la taille du lot pour la cinquième transaction après 4 pertes consécutives, puis augmentez les lots de façon linéaire pour les transactions suivantes jusqu'à deux gains consécutifs et revenez à la taille de lot par défaut.

4) Trailing stop de 12pips (au-dessus pour vendre et en dessous pour acheter de l'indicateur atrstops_v1 de la bougie précédente pour toutes les transactions.

C'est tout, merci de m'aider.

Dossiers :
 

Vous auriez pu obtenir exactement la même chose avec une seule ligne de code.

GlobalVariableSet("TRENDSET_"+Symbol());

Vous pourriez également ajouter le cadre temporel pour le rendre encore plus unique.

Pour être honnête, je ne sais pas vraiment quel était le but de votre message.

Salutations

Lux

 

Comment appeler une valeur depuis H1 en utilisant iCustom ?

Bonjour,

J'essaie de coder un indicateur très simple, mais je ne parviens pas à appeler la valeur de Laguerre depuis H1.

Ce que je veux faire :

En utilisant 1M TF

signal d'achat : Laguerre franchissant le niveau 0.15 tête haute et Laguerre H1 > 0.75

signal de vente : Laguerre traversant le niveau 0.75 tête en bas et Laguerre H1 < 0.15

J'ai créé l'indicateur pour le simple cross et il fonctionne, le problème est que lorsque j'essaie de vérifier la valeur de Laguerre H1 : c'est un désordre !

J'ai essayé 2 façons :

La première :

#property indicator_chart_window

#property indicator_buffers 2

#property indicator_color1 SeaGreen

#property indicator_color2 Red

#property indicator_width1 3

#property indicator_width2 3

double CrossUp[];

double CrossDown[];

extern bool SoundON=true;

double alertTag;

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

//| Custom indicator initialization function |

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

int init()

{

//---- indicators

SetIndexStyle(0, DRAW_ARROW, EMPTY,3);

SetIndexArrow(0, 233);

SetIndexBuffer(0, CrossUp);

SetIndexStyle(1, DRAW_ARROW, EMPTY,3);

SetIndexArrow(1, 234);

SetIndexBuffer(1, CrossDown);

//----

return(0);

}

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

//| Custom indicator deinitialization function |

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

int deinit()

{

//----

//----

return(0);

}

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

//| Custom indicator iteration function |

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

int start() {

int limit, i;

int counted_bars=IndicatorCounted();

//---- check for possible errors

if(counted_bars<0) return(-1);

//---- last counted bar will be recounted

if(counted_bars>0) counted_bars--;

limit=Bars-counted_bars;

for(i = 0; i <= limit; i++) {

if ( (iCustom(NULL,0,"Laguerre",0.66,9500,0,i) > 0.15) && (iCustom(NULL,0,"Laguerre",0.66,9500,0,i+1) < 0.15)

&&(iCustom(Symbol(),PERIOD_H1,"Laguerre",0.66,9500,0,i) > 0.75)) //check for buy signal

{

CrossUp = Close;

}

else if ( (iCustom(NULL,0,"Laguerre",0.66,9500,0,i) 0.75)

&& (iCustom(Symbol(),PERIOD_H1,"Laguerre",0.66,9500,0,i) < 0.15)) //check for sell signal

{

CrossDown = Close;

}

if (SoundON==true && i==1 && CrossUp > CrossDown && alertTag!=Time[0]){

Alert("SHORT signal on ",Symbol()," ",Period());

alertTag = Time[0];

}

if (SoundON==true && i==1 && CrossUp < CrossDown && alertTag!=Time[0]){

Alert("Long Signal on ",Symbol()," ",Period());

alertTag = Time[0];

}

}

return(0);

}[/CODE]

second one:

[CODE]//+------------------------------------------------------------------+

//| Shift.mq4 |

//| me |

//|

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

#property copyright "me"

#property indicator_chart_window

#property indicator_buffers 2

#property indicator_color1 Lime

#property indicator_color2 Red

#property indicator_width1 4

#property indicator_width2 4

//---- buffers

double ExtMapBuffer1[];

double ExtMapBuffer2[];

bool Fact_Up = true; // Fact of report that market..

bool Fact_Dn = true; //..is bullish or bearish

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

//| Custom indicator initialization function |

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

int init()

{

//---- indicators

SetIndexStyle(0,DRAW_ARROW);

SetIndexArrow(0,241);

SetIndexBuffer(0,ExtMapBuffer1);

SetIndexEmptyValue(0,0.0);

SetIndexStyle(1,DRAW_ARROW);

SetIndexArrow(1,242);

SetIndexBuffer(1,ExtMapBuffer2);

SetIndexEmptyValue(1,0.0);

//----

return(0);

}

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

//| Custom indicator deinitialization function |

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

int deinit()

{

//----

//----

return(0);

}

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

//| Custom indicator iteration function |

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

int start()

{

//int limit;

int counted_bars=IndicatorCounted();

//---- last counted bar will be recounted

if(counted_bars>0) counted_bars--;

if(counted_bars<0) return(-1);

//limit=Bars-counted_bars;

//----

double MA; // MA value on 0 bar

double MA2;

double MA3;

double MA4;

//--------------------------------------------------------------------

double value1, value2, value3;

for (int i=Bars-1;i>=0;i--)

//---- main loop

//for(int i=0; i<limit; i++)

{value1=0.0;

value2=0.0;

value3=0.0;

//--------------------------------------------------------------------

// Checking if bullish

if( (iCustom(Symbol(),NULL,"Laguerre",0,i) > 0.15) && (iCustom(Symbol(),NULL,"Laguerre",0,i+1) < 0.15) && Fact_Up == true

&&(iCustom(Symbol(),PERIOD_H1,"Laguerre",0,i) > 0.75))

{

Fact_Dn = true; // Report about bullish market

Fact_Up = false; // Don't report bullish market

// Alert("BUY SIGNAL.");

value1=Open;

}

//--------------------------------------------------------------------

// Checking if bearish

if( (iCustom(Symbol(),NULL,"Laguerre",0,i) 0.75) && Fact_Dn == true

&&(iCustom(Symbol(),PERIOD_H1,"Laguerre",0,i) < 0.15))

{

Fact_Up = true; // Report about bearish market

Fact_Dn = false; // Don't report bearish market

// Alert("SELL SIGNAL.");

value2=Open;

}

ExtMapBuffer1=value1;

ExtMapBuffer2=value2;

}

//----

return(0);

}

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

les deux ne fonctionnent pas, la ligne ROUGE est le problème, sans la ligne ROUGE ça fonctionne parfaitement.

J'ai essayé (iCustom(Symbol(),PERIOD_H1, "Laguerre",0,i) < .....)

(iCustom(Symbol(),PERIOD_H1, "Laguerre",0,0) < ....)

(iCustom(Symbol(),60, "Laguerre",0,i) < ....)

(iCustom(Symbol(),60, "Laguerre",0,0) < .....)

J'ai aussi essayé avec les variables : (iCustom(Symbol(),PERIOD_H1, "Laguer re",0.66,9500,0,i)

iF i put :

Print(iCustom(Symbol(),60, "Laguerre ",0,i)) ; avant le "if" il retourne un nombre aléatoire...

mais avec : Print(iCustom(Symbol(),60, "Laguerre ",0,0)) ; il retourne la bonne valeur de H1

maintenant le problème reste le même si j'utilise iCustom(Symbol(),60, "Laguerre",0,0) ; dans le "if" cela ne fonctionne pas...

le problème vient du "for" et du "i" et de la valeur "shift" de iCustom mais je n'arrive pas à le résoudre.

votre aide serait la bienvenue !

J'ai joint l'indicateur Laguerre que j'utilise si vous voulez l'essayer.

Si quelqu'un est prêt à le recoder à partir de zéro, n'hésitez pas à le faire.

ça me rend dingue...

Dossiers :
laguerre.mq4  3 kb