Comment coder ? - page 182

 

...

Ce n'est pas une erreur de code

Allez dans Outils->Centre d'histoire et ensuite choisissez et téléchargez les données d'une minute du symbole que vous voulez tester (tout ce dont vous avez besoin pour une précision de 90% est une donnée d'une minute, pas besoin de télécharger le reste).

Badguy:
Salut les codeurs

Je suis encore en train de faire mes premiers pas dans le code MQL.

Quelle est la raison pour laquelle j'ai le message suivant dans le journal :

Testgenerator :

unmatched data error ( volume limit 159 at 2009.05.06 19 15 exceeded )

Où dois-je regarder dans le code ?

Merci
 
abundance:
Mon ami et moi travaillons sur un EA. A un moment donné, il (l'EA) doit lire et récupérer le prix à une certaine heure, disons 17:00 EST ... etc.

Un senior peut-il m'indiquer comment faire, au lieu de compter les barres de prix à rebours ? Peut-être existe-t-il déjà une fonction écrite pour cela. Merci de m'aider. Merci à tous et que Dieu vous bénisse !

B rgds/abondance

iBarShift(..) permet de trouver le nombre de barres sur votre graphique, puis d'utiliser Close ou Open.

 
Roger09:
iBarShift(..) permet de trouver le nombre de barres sur votre graphique, puis d'utiliser Close ou Open.

Merci, Roger. C'était utile. Et désolé de ne pas avoir été plus clair. Nous avons besoin des prix à l'achat et à la vente. Comment pouvons-nous les obtenir ? Veuillez nous excuser si c'est une question stupide.

B rgds/abondance

 

Erreur de données

Bonjour mladen

merci pour votre réponse rapide.

Je pense que ce n'est pas un problème de tickdata, car lorsque je teste avec un autre EA, cela fonctionne bien.

Je pense que c'est un problème avec le Custom-Indicator.

Je vais le construire en suivant l'indication : AllAverages_v2.3

double ALL_AVERAGES_0 = iCustom(NULL,ALL_AVERA_TF, "AllAverages_v2.3",ALL_AVERA_PERIOD,ALL_AVERA_SHIFT,ALL_AVERA_METHOD,ALL_AVERA_PRICE,0) ;

Maintenant j'ai le message suivant : invalid index buffer number in iCustom function.

Comment définir cet iCustom correctement ?

Bonjour mladen j'ai trouvé le problème

J'ai oublié un paramètre : Couleur

la définition correcte :

double ALL_AVERAGES_0 = iCustom(NULL,ALL_AVERA_TF, "AllAverages_v2.3",ALL_AVERA_PERIOD,ALL_AVERA_SHIFT,ALL_AVERA_METHOD,ALL_AVERA_PRICE,ALL_AVERA_COLOR,0) ;

mladen:
Ce n'est pas une erreur de code Allez dans Outils->Centre d'histoire et ensuite choisissez et téléchargez les données d'une minute du symbole que vous voulez tester (tout ce dont vous avez besoin pour une précision de 90% est une donnée d'une minute, pas besoin de télécharger le reste).
Dossiers :
 
abundance:
Merci Roger. C'était utile. Et désolé de ne pas avoir été plus clair. Nous avons besoin des prix Bid et Ask. Comment pouvons-nous les obtenir ? Veuillez excuser si c'est une question stupide B rgds/abundance

Tous les prix sur les graphiques sont des prix acheteurs. Ask=Bid+MarketInfo(Symbol(),MODE_SPREAD)*Point ;

 

Restriction des transactions

J'ai donc commencé à écrire un EA de base avec l'un de ces constructeurs d'EA générant des modèles. Il semble que j'ai bien compris le principe du modèle d'EA, mais j'ai besoin d'un moyen pour que l'EA n'entre qu'une seule transaction au maximum. Pour l'instant, il continue à générer des transactions et le tirage au sort est ridicule. Voici le code du lot de transaction :

//Check position

bool IsTrade = False ;

for (int i = 0 ; i < Total ; i ++) {

OrderSelect(i, SELECT_BY_POS, MODE_TRADES) ;

if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) {

IsTrade = True ;

if(OrderType() == OP_BUY)) {

//Fermeture

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

//| Signal Begin(Exit Buy) |

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

if (CloseBuy1_1 >= CloseBuy1_2) Order = SIGNAL_CLOSEBUY ;

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

//| Signal End(Exit Buy) |

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

if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) | (!EachTickMode && (Bars != BarCount)))) {

OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen) ;

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy") ;

if (!EachTickMode) BarCount = Bars ;

IsTrade = False ;

continuer ;

}

//Trailing stop

if(UseTrailingStop && TrailingStop > 0) {

if(Bid - OrderOpenPrice() > Point * TrailingStop) {

if(OrderStopLoss() < Bid - Point * TrailingStop) {

OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen) ;

if (!EachTickMode) BarCount = Bars ;

continuer ;

}

}

}

} else {

//Fermeture

Si quelqu'un peut vous aider, ce sera très apprécié.

 
Styex:
J'ai donc commencé à écrire un EA de base avec l'un de ces constructeurs d'EA générant des modèles. Il semble que j'ai bien compris le principe du modèle d'EA, mais j'ai besoin d'un moyen pour que l'EA n'entre qu'une seule transaction au maximum. Pour l'instant, il continue à générer des transactions et le tirage au sort est ridicule. Si quelqu'un peut m'aider, ce serait très apprécié.
if (OrdersTotal() == 0)

{

//Check position

bool IsTrade = False;

for (int i = 0; i < Total; i ++) {

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) {

IsTrade = True;

if(OrderType() == OP_BUY) {

//Close

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

//| Signal Begin(Exit Buy) |

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

if (CloseBuy1_1 >= CloseBuy1_2) Order = SIGNAL_CLOSEBUY;

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

//| Signal End(Exit Buy) |

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

if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");

if (!EachTickMode) BarCount = Bars;

IsTrade = False;

continue;

}

//Trailing stop

if(UseTrailingStop && TrailingStop > 0) {

if(Bid - OrderOpenPrice() > Point * TrailingStop) {

if(OrderStopLoss() < Bid - Point * TrailingStop) {

OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);

if (!EachTickMode) BarCount = Bars;

continue;

}

}

}

} else {

//Close

}
 

Merci OnTheRoad

J'ai trouvé cet EA, mais je n'en comprends pas certaines parties.

bool get_signal()

{

bool enable_trade = false ;

int trend_up = 0 ;

int trend_down = 0 ;

int i ;

ArrayInitialize( TradeSign, false ) ;

if( Bars >= 100 ){

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

Buf_MA[0][ i ] = calc_SMA( PERIOD_M30, MA_prm_1, i ) ;

Buf_MA[1][ i ] = calc_SMA( PERIOD_M30, MA_prm_2, i ) ;

Buf_MA[2][ i ] = calc_SMA( PERIOD_M30, MA_prm_3, i ) ;

Buf_MA[3][ i ] = calc_SMA( PERIOD_M30, MA_prm_4, i ) ;

Buf_MA[4][ i ] = calc_SMA( PERIOD_M30, MA_prm_5, i ) ;

}

double vRSI = iRSI( Symbol(), PERIOD_M5, RSI_period5, PRICE_CLOSE, 0 ) ;

double vRSI2 = iRSI( Symbole(), PERIOD_M1, RSI_period1, PRICE_CLOSE, 0 ) ;

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

if((Buf_MA[2] < Buf_MA[1]) && (Buf_MA[1] < Buf_MA[0])){

trend_up++ ;

}

}

if((trend_up > 3) && (vRSI <= RSI_lower) && (vRSI2 <= RSI_lower)){

TradeSign[SIG_Buy] = true ;

enable_trade = true ;

}

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

if((Buf_MA[2] > Buf_MA[1]) && (Buf_MA[1] > Buf_MA[0])){

trend_down++ ;

}

}

if((trend_down > 3) && (vRSI >= RSI_upper) && (vRSI2 >= RSI_upper)){

TradeSign [SIG_Sell] = true ;

enable_trade = true ;

}

}

return(enable_trade) ;

}

double calc_SMA( int timeframe, int period, int offset )

{

double vMA = 0 ;

double sum=0 ;

int i ;

for( i = 0 ; i < période ; i++ ){

sum += iClose( Symbol(), timeframe, i + offset ) ;

}

vMA = sum / period ;

return(vMA) ;

}

Il y a une partie où "trendup>3", est-ce calculé à partir d'un tableau ? Comment fonctionne un tableau qui peut donner "trendup>3" ? Est-ce pour connaître la moyenne d'une seule ligne (cette ligne est susceptible de monter ou descendre) ? Je ne comprends pas comment cela fonctionne.
Dossiers :
 

Comment réinitialiser les experts lorsque le profit cible est atteint ? J'utilise une stratégie martingale mais elle n'ouvre pas les lots en séquence...

exemple : lots 0.1, 0.2, 0.4, 0.8, 1.6

lots ouverts : 0.1, 0.2, 0.4 -> prise de profit au lot 0.4 mais les prochains lots sont 0.8, 0.1, 0.2, 0.4...

quelqu'un peut aider... ???

int T=0;

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

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

if(OrderSymbol()==Symbol() && OrderComment()==Name_ExpertS)

{ T++;

if(OrderType()==OP_BUY) s=1;

if(OrderType()==OP_SELL) s=2;

Last=OrderOpenPrice();

}}

if (Lots<0.1) Lots=0.1;

for (int j=0;j<T;j++)

{

Lots=LotsUP[j];

}
 

High/Low avec critères

J'essaie de coder un indicateur qui recherche des éléments spécifiques avant de déclarer qu'une bougie est un vrai haut ou un vrai bas. Voici en gros les critères (j'ai joint un graphique pour aider à expliquer) :

1. Recherchez une clôture inférieure aux 20 clôtures précédentes (la deuxième flèche est ce point), puis (2) 12 barres plus tard, la clôture doit être supérieure aux 12 clôtures précédentes (la troisième flèche). Cette tendance à la hausse se poursuivra jusqu'à ce que (3) la clôture soit inférieure aux 7 clôtures précédentes (quatrième flèche).

J'ai essayé d'utiliser la fonction iLowest sans grand succès. Je pense que ma meilleure chance est d'utiliser un tableau, mais ma connaissance des tableaux est limitée.

Avez-vous des idées ou des exemples sur la façon d'utiliser ArrayMinimum et ArrayMaximum ? Ou s'il existe un moyen de faire fonctionner les fonctions iLowest et iHighest ?

Dossiers :