Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 89

 
Omm:

comment déterminer le moment de la journée pour négocier des contrats à terme ?

MarketInfo(Symbol(),MODE_STARTING)

MarketInfo(Symbole(),MODE_EXPIRATION)

renvoie des zéros


quel courtier ?

Vous devez donc tout d'abord vérifier auprès de votre courtier.

 
alexey1979621:
Chers membres du forum, comment écrire la condition de franchissement de la ligne de canal par le prix dans votre Expert Advisor, par exemple, le prix franchit la ligne de canal par le haut et le trade est ouvert ou fermé ? Veuillez noter que je suis intéressé par le moment de ce crossover. Je serais heureux de vous aider.

double price0=NormalizeDouble(ObjectGetValueByShift("NameYourChannelLine", 0),Digits)) ; - valeur de votre ligne sur la barre 0.

double price1=NormalizeDouble(ObjectGetValueByShift("NameYourChannelLine", 1),Digits)) ; - valeur de votre ligne sur la barre 1.

Et la façon la plus simple de déterminer le moment de la rupture sur la barre zéro : si(High[0]>prix0 && High[1]<=prix1) {la ligne a cassé vers le haut}, si(Low[0]<prix0 && Low[1]>=prix1) {la ligne a cassé vers le bas}. Les ifs seront VRAIS à partir du moment de la percée jusqu'à la fin de la barre actuelle. Il est souhaitable que votre ligne de canal ait la propriété OBJPROP_RAY==True .

 
alexey1979621:
Chers membres du forum, comment créer une condition dans un EA pour le franchissement de la ligne de canal, par exemple, si le prix franchit la ligne de canal par le haut et qu'une transaction est ouverte ou fermée ? Veuillez noter que je suis intéressé par le moment de ce crossover. Je serais heureux de vous aider.

De plusieurs façons :

Si Ask > ligne du canal et Low[1] <=ligne du canal, croisement vers le haut.

Si Bid < ligne du canal et High[1] >= ligne du canal, croisement vers le bas.

Vous pouvez vérifier avec MA avec la période 1

 
comment puis-je sélectionner le dernier ordre FERMÉ dans le logiciel et obtenir des informations à partir de celui-ci ?
 
Merci pour votre aide

. J'ai dû mal formuler la question, j'aurais dû joindre une partie du code. Je me suis trompé.

Comme le suggère le site

artmedia70 a indiqué la fermeture de l'intersection comme suit. Cela conclut l'affaire selon la capture d'écran. Mais nous devons conclure l'affaire là où la croix est

void CheckForClose()
{
double PriceHigh, PriceLow ;
//---- ne négocient que pour les premiers tiks du nouveau bar.
si(Volume[0]>1) retour ;

PriceHigh = iCustom (Symbol(), 0, "ExtremeTMALine", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, TrendThreshold, Distances, 1, 0) ;
PriceLow = iCustom (Symbol(), 0, "ExtremeTMALine", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, TrendThreshold, Distances, 2, 0) ;


for(int i=0;i<OrdersTotal();i++)
{
si(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break ;
if(OrderMagicNumber()!=124 || OrderSymbol()!=Symbol()) continuer ;
//---- type d'ordre de contrôle
si(OrderType()==OP_BUY)
{
if(Low[1]<=PriceHigh && Ask>=PriceHigh ) OrderClose(OrderTicket(),OrderLots(),Bid,3,White) ;
pause ;
}
si(OrderType()==OP_SELL)
{
si(High[1]>=PriceLow && Bid<=PriceLow) OrderClose(OrderTicket(),OrderLots(),Ask,3,White) ;
pause ;
}
}
//----
}

 
 
webip:
comment sélectionner le dernier ordre FERMÉ dans le logiciel et obtenir des informations à partir de celui-ci ?

Vous pouvez trouver tout ce que vous voulez.
 
alexey1979621:
Merci pour votre aide

. J'ai dû mal formuler la question, j'aurais dû joindre une partie du code. Je me suis trompé.

Comme le suggère le site

artmedia70 a indiqué la fermeture de l'intersection comme suit. L'affaire se conclut selon la capture d'écran. Mais nous devons conclure l'affaire là où la croix est

void CheckForClose()
{
double PriceHigh, PriceLow ;
//---- ne négocient que pour les premiers tiks du nouveau bar.
si(Volume[0]>1) retour ;

PriceHigh = iCustom (Symbol(), 0, "ExtremeTMALine", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, TrendThreshold, Distances, 1, 0) ;
PriceLow = iCustom (Symbol(), 0, "ExtremeTMALine", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, TrendThreshold, Distances, 2, 0) ;


for(int i=0;i<OrdersTotal();i++)
{
si(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break ;
if(OrderMagicNumber()!=124 || OrderSymbol()!=Symbol()) continuer ;
//---- type d'ordre de contrôle
si(OrderType()==OP_BUY)
{
if(Low[1]<=PriceHigh && Ask>=PriceHigh ) OrderClose(OrderTicket(),OrderLots(),Bid,3,White) ;
pause ;
}
si(OrderType()==OP_SELL)
{
si(High[1]>=PriceLow && Bid<=PriceLow) OrderClose(OrderTicket(),OrderLots(),Ask,3,White) ;
pause ;
}
}
//----
}

ExtremeTMA - ils sont incroyablement à découvert. C'est un gros morceau d'histoire - les 30 dernières mesures, si ce n'est plus. Je l'ai utilisé pour écrire un conseiller expert - c'est nul. Imaginez : un signal apparaît, je l'ai atteint, mais quelque temps plus tard, le signal n'existe plus dans l'historique - l'indicateur est redessiné et il s'avère que je suis entré pour rien.

Vous avez fait une erreur en déterminant le croisement : if(Low[1]<=PriceHigh && Ask>=PriceHigh ) ... vous devriez écrire if(Low[1]<=PriceHigh && Ask>PriceHigh ) ... Et pour le contraire par analogie.

Insérez le code avec le bouton SRC dans le panneau en haut de la fenêtre de saisie.

ZZZY Alors, où est la capture d'écran avec la croix ?

 
artmedia70:

ExtremeTMA - ils sont incroyablement à découvert. Et un énorme morceau d'histoire - les 30 dernières mesures, si ce n'est plus. Je l'ai utilisé pour écrire un conseiller expert - c'est nul. Imaginez : j'ai reçu un signal, je l'ai saisi, et quelque temps plus tard, le signal n'existe plus dans l'historique - l'indicateur a effectué trop de redessinages et il s'avère que j'ai saisi le marché en vain.

Vous avez fait une erreur en déterminant le croisement : if(Low[1]<=PriceHigh && Ask>=PriceHigh ) ... vous devriez écrire if(Low[1]<=PriceHigh && Ask>PriceHigh ) ... Et pour le contraire par analogie.

SZY Le code doit être collé en appuyant sur le bouton SRC dans le panneau en haut de la fenêtre de saisie de texte.


Corrigé, j'ai fermé la transaction de la même manière que dans la capture d'écran ci-dessus, et je devrais être là où se trouve la croix rouge.

Je suis d'accord qu'ExtremeTMA redessine, mais je suppose que cela n'affecte pas la recherche de points d'entrée, l'essentiel ici étant les filtres. J'ai utilisé l'indicateur TDI. J'ai joint ce que j'ai fait (je n'ai pas de bonnes mains, c'est pourquoi l 'Expert Advisor est un bon projet ). Je n'ai qu'un seul problème avec lui, il faut environ 5 heures dans le testeur pour 1 an (j'ai fait une erreur quelque part). S'il n'est pas difficile de rechercher les erreurs.

extern double  Lots             = 0.1;
extern string Сomment           = "TMA Canal2";
extern int TakeProfit           = 20;     //тейкпрофит (отрицательное число или ноль чтобы не использовать);
extern int StopLoss             = 20;     // уровень Stop Loss для покупки;
extern int Slippage             = 2; // проскальзывание 
extern int Magic                = 124;

extern string  Indi             = "ExtremeTMALine";
extern string TimeFrame         = "current time frame";
extern int    HalfLength        = 56;
extern int    Price             = PRICE_CLOSE;
extern double ATRMultiplier     = 2.0;
extern int    ATRPeriod         = 100;
extern bool   Interpolate       = true;
extern double TrendThreshold    = 0.5;
extern bool   Distances         = false;


extern string  Indicatora       = "TradersDynamicIndex";
extern int RSI_Period           = 13;         //8-25
extern int RSI_Price            = MODE_CLOSE;           //0-6
extern int Volatility_Band      = 34;    //20-40
extern int RSI_Price_Line       = 2;      
extern int RSI_Price_Type       = MODE_SMA;      //0-3
extern int Trade_Signal_Line    = 7;   
extern int Trade_Signal_Type    = MODE_SMA;   //0-3
extern bool UseAlerts           = false;

double PriceHigh, PriceLow, SL, TP, TDIHigh, TDILow, RSIPriceLine, TradeSignalLine;
int ticket;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
{
      if (Digits ==3 || Digits ==3) // для пятизначного брокера
         {
            TakeProfit *= 10;
            StopLoss *= 10;
            Slippage *= 10;
         }
      return(0);
}


//+------------------------------------------------------------------+
//| Calculate open positions                                         |
//+------------------------------------------------------------------+
int CalculateCurrentOrders(string symbol)
  {
   int buys=0,sells=0;
//----
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==124)
        {
         if(OrderType()==OP_BUY)  buys++;
         if(OrderType()==OP_SELL) sells++;
        }
     }
//---- return orders volume
   if(buys>0) return(buys);
   else       return(-sells);
  }
   
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void CheckForOpen()
  {
   double PriceHigh, PriceLow, TDIHigh, TDILow, RSIPriceLine, TradeSignalLine;
   int ticket;

//---- go trading only for first tiks of new bar
   if(Volume[0]>1) return;
   
   PriceHigh = iCustom (Symbol(), 0, "ExtremeTMALine", TimeFrame, HalfLength , Price, ATRMultiplier, ATRPeriod, Interpolate, TrendThreshold, Distances, 1, 0);
   PriceLow = iCustom (Symbol(), 0, "ExtremeTMALine", TimeFrame, HalfLength , Price, ATRMultiplier, ATRPeriod, Interpolate, TrendThreshold, Distances, 2, 0);
   TDIHigh = iCustom (Symbol(), 0, "TradersDynamicIndex", RSI_Period, RSI_Price, Volatility_Band, RSI_Price_Line, RSI_Price_Type, Trade_Signal_Line, Trade_Signal_Type,UseAlerts, 1, 0); // голубая
   TDILow = iCustom (Symbol(), 0, "TradersDynamicIndex", RSI_Period, RSI_Price, Volatility_Band, RSI_Price_Line, RSI_Price_Type, Trade_Signal_Line, Trade_Signal_Type,UseAlerts, 3, 0); // голубая 
   RSIPriceLine = iCustom (Symbol(), 0, "TradersDynamicIndex", RSI_Period, RSI_Price, Volatility_Band, RSI_Price_Line, RSI_Price_Type, Trade_Signal_Line, Trade_Signal_Type,UseAlerts, 4, 0); // зеленая
   TradeSignalLine = iCustom (Symbol(), 0, "TradersDynamicIndex", RSI_Period, RSI_Price, Volatility_Band, RSI_Price_Line, RSI_Price_Type, Trade_Signal_Line, Trade_Signal_Type,UseAlerts, 5, 0); // красная
   
   
   if(Open[1]>PriceHigh || Close[1]>PriceHigh || High[1]>PriceHigh && Ask<=PriceHigh || Ask>=PriceHigh && TDIHigh > 68 && RSIPriceLine < TradeSignalLine)  

     {
      ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"TMA Canal2",124,0,Red);
      return;
     }
//---- buy conditions
   if(Open[1]<PriceLow || Close[1]<PriceLow || Low[1]<PriceLow && Bid>=PriceLow || Bid<=PriceLow && TDILow < 32 && RSIPriceLine > TradeSignalLine)  

     {
      ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"TMA Canal2",124,0,Blue);
      return;
     }
//----
  }

  //+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+
void CheckForClose()
  {
   double PriceHigh, PriceLow;
//---- go trading only for first tiks of new bar
   if(Volume[0]>1) return;
 
   PriceHigh = iCustom (Symbol(), 0, "ExtremeTMALine", TimeFrame, HalfLength , Price, ATRMultiplier, ATRPeriod, Interpolate, TrendThreshold, Distances, 1, 0); 
   PriceLow = iCustom (Symbol(), 0, "ExtremeTMALine", TimeFrame, HalfLength , Price, ATRMultiplier, ATRPeriod, Interpolate, TrendThreshold, Distances, 2, 0); 
   
   
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)        break;
      if(OrderMagicNumber()!=124 || OrderSymbol()!=Symbol()) continue;
      //---- check order type 
      if(OrderType()==OP_BUY)
        {
         if(Low[1]<=PriceHigh && Ask>PriceHigh) OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
         break;
        }
      if(OrderType()==OP_SELL)
        {
         if(High[1]>=PriceLow && Bid<PriceLow) OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
         break;
        }
     }
//----
  }

//+------------------------------------------------------------------+
//| Start function                                                   |
//+------------------------------------------------------------------+
void start()
   {
//---- check for history and trading
   if(Bars<100 || IsTradeAllowed()==false) return;
//---- calculate open orders by current symbol
   if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
   else                                    CheckForClose();
//----
  }
 
alexey1979621:

Corrigé, j'ai fermé la transaction de la même manière que dans la capture d'écran ci-dessus, mais là où la croix rouge devrait être.

Je suis d'accord pour dire qu'ExtremeTMA est surdimensionné, mais je suppose que cela n'affecte pas la recherche de points d'entrée, l'essentiel ici étant les filtres. J'ai utilisé l'indicateur TDI. J'ai attaché la pointe (mes mains ne sont pas simples, le projet Expert Advisor est comme mes mains). Je n'ai qu'un seul problème avec lui, il faut environ 5 heures dans le testeur pour 1 an (j'ai fait une erreur quelque part). S'il n'est pas difficile de rechercher les erreurs.

Je n'ai pas encore cherché d'erreurs - j'ai beaucoup à faire.

Afin de fermer Sell où se trouve la croix rouge, vous devez vérifier la barre actuelle. Si Ask<= niveau de clôture && High[1]>niveau de clôture