Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 479

 
Vladislav Andruschenko:
Écart, s'il est défini comme courant. Date de fin du test si la facturation est en cours. Il peut y avoir beaucoup d'autres raisons.

Spread fixe, Date de fin 01.01.18

 
Aidar Kaliaskar:

Etalement fixe, Date de fin 01.01.18


coût par point..... etc


essayez ce week-end.

 

J'essaie de créer un indicateur dans MQL4, qui tracerait une ligne sur le graphique "US.500+" par les prix de clôture de "US.30+". En général, les lignes de prix de deux symboles sont visibles sur un seul graphique. Voici le code, mais il ne fonctionne pas. Dans le message de journal "l'indicateur sur le tampon personnalisé n'est pas encore supporté". Apprenez-moi pourquoi ça ne marche pas. Opps.

#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots 1
#property indicator_color1 clrRed
#property indicator_style1 STYLE_DOT
#property indicator_type1  DRAW_LINE
//---
input string   symbolName="US.30+"; // Symbol name
input double   difference=-22387.0; // Difference from other symbol
//--- price buffer for other symbol
double otherSymbol[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,otherSymbol,INDICATOR_DATA);
//---
   return INIT_SUCCEEDED;
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int     rates_total,
                const int     prev_calculated,
                const int     begin,
                const double &price[])
  {
//---
   for(int i=prev_calculated;i<rates_total;i++)
      otherSymbol[i+1]=iClose(symbolName,PERIOD_CURRENT,i)+difference;
   ArraySetAsSeries(otherSymbol,true);
//--- return value of prev_calculated for next call
   return(rates_total);
  }
 
Maxim Khrolenko:

J'essaie de créer un indicateur dans MQL4, qui tracerait une ligne sur le graphique "US.500+" par les prix de clôture de "US.30+". En général, les lignes de prix de deux symboles sont visibles sur un seul graphique. Voici le code, mais il ne fonctionne pas. Dans le message de journal "l'indicateur sur le tampon personnalisé n'est pas encore supporté". Apprenez-moi pourquoi ça ne marche pas. Opps.

Parce que vous devez utiliser la première forme d'appel.
 
Artyom Trishkin:
Parce que vous devez utiliser la première forme d'appel.
Je l'ai changé et... ça a marché ! Merci beaucoup.
 
STARIJ:

J'ai trouvé la raison - 60 secondes doivent être comptées hors d'une boucle.

Merci, merci pour cette clarification.

Si au lieu de 60 secondes, ce sera 300.

Lesheures d'ouverture des positions sont différentes, vous devez écrire à 300 secondes de l'heure d'ouverture de la position.

Comment dois-je m'y prendre ?

 
lil_lil Si c'est 300 au lieu de 60 secondes ... vous devez écrire à intervalles de 300 secondes à partir du moment où la position a été ouverte. Comment faites-vous cela ?

Avez-vous essayé mon programme ? Je ne comprends pas vraiment 300... Si vous mettez 300 au lieu de 60, est-ce que c'est vrai ? Si vous me dites comment en tirer profit, j'essaierai de mieux comprendre !

 

Aide avec l'EA, comme toujours le problème est probablement trivial, mais je n'ai pas résolu l'énigme.

Devrait ouvrir l'achat siema>smma de l'ema ou de ne pas atteindre cepoint(même pour la vente). Il faut conclure l'affaire à la fermeture du bar - ouvrir un nouveau bar. La suivante s'ouvre de la même manière, mais avec une condition supérieure auprix d'ouverture de la précédente, c'est-à-direlast_order_price.

Mais au final, il s'ouvre où il veut et se ferme. (Au début du test, il s'ouvre et se referme immédiatement)

#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

input int MA_period=10;
input int take=200, stop=200, Magic=1104;
input double lot=0.05;
input int slippage=30;
input int point=5;
double last_order_price,fast_MA,slow_MA;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   fast_MA=iMA(Symbol(),PERIOD_CURRENT,MA_period,0,MODE_EMA,PRICE_CLOSE,0);
   slow_MA=iMA(Symbol(),PERIOD_CURRENT,MA_period,0,MODE_SMMA,PRICE_CLOSE,0);
 
   if(fast_MA>slow_MA) last_order_price=0;
      else last_order_price=Ask+stop*_Point;

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---

   fast_MA=iMA(Symbol(),PERIOD_CURRENT,MA_period,0,MODE_EMA,PRICE_CLOSE,0);
   slow_MA=iMA(Symbol(),PERIOD_CURRENT,MA_period,0,MODE_SMMA,PRICE_CLOSE,0);
   
   if(Bid<=fast_MA+point*_Point && Bid>=fast_MA && fast_MA>slow_MA && SymOrder() && Bid>last_order_price)
   {
      OrderSend(Symbol(),OP_BUY,lot,Ask,slippage,Ask-stop*_Point,Ask+take*_Point,NULL,Magic,0,clrBlue);
      last_order_price=Bid;
   }
   
   if(Bid>=fast_MA-point*_Point && Bid<=fast_MA && fast_MA<slow_MA && SymOrder() && Bid<last_order_price)
   {
      OrderSend(Symbol(),OP_SELL,lot,Bid,slippage,Bid+stop*_Point,Bid-take*_Point,NULL,Magic,0,clrRed);   
      last_order_price=Bid;
   }
      
   if(!SymOrder() && Volume[0]<2 && OrderType()==OP_BUY)
   {
      OrderClose(OrderTicket(),lot,Bid,slippage,clrWhite); 
      
   }
   if(!SymOrder() && Volume[0]<2 && OrderType()==OP_SELL)
   {
      OrderClose(OrderTicket(),lot,Ask,slippage,clrWhite);  

   }     
      
  }
//+------------------------------------------------------------------+
bool SymOrder()
{
   for(int i=0; i<OrdersTotal(); i++)
      {
         OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) return false;
      }

   return true;
}
 
Roman Sharanov:

Aide avec l'EA, comme toujours le problème est probablement trivial, mais je n'ai pas résolu l'énigme.

Devrait ouvrir l'achat siema>smma de l'ema ou de ne pas atteindre cepoint(même pour la vente). Il faut conclure l'affaire à la fermeture du bar - ouvrir un nouveau bar. La suivante s'ouvre de la même manière, mais avec une condition supérieure auprix d'ouverture de la précédente, c'est-à-direlast_order_price.

Mais au final, il s'ouvre où il veut et se ferme. (Au début du test, il s'ouvre et se referme immédiatement)

Comment puis-je suggérer ? Enregistrez votre code dans le presse-papiers, écrivez-le dans le conseiller expert et exécutez-le dans le testeur de stratégie? Eh bien, je veillerai à ce qu'il s'ouvre et se ferme. Et alors ? Je peux l'exécuter sur une démo - aujourd'hui c'est samedi, demain c'est dimanche, le marché est fermé. Vous devez les regarder avec vos yeux ? Eh bien, vous devez garder à l'esprit les valeurs de toutes les variables. Il existait auparavant une méthode de débogage avec un crayon et du papier - essayez-la. Vous pouvez aussi mettre une Alert("Bid=", Bid, Fast+P=",Fast_Ema+point*_Point," ....) avant tous les OrderSelect et OrderClose et mettre un jour dans le testeur par exemple du 19 au 20 février puis après le test ouvrir le log, faire une copie, supprimer les lignes inutiles et analyser. Le MetaEditor dispose également d'une fonction de débogage. Quand on apprend à déboguer... ce sera génial.
 

Où y a-t-il un bouton ?

Pouvez-vous me dire comment aligner le texte dans le contrôle CSpinEdit à partir de #include <Controls\SpinEdit.mqh> (champ de texte avec incrément).

Par défaut, il est aligné sur le bord gauche, mais je veux qu'il soit aligné sur le bord droit.