[ARCHIVE] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 3. - page 176

 

Pouvez-vous me dire comment comparer correctement le prix actuel ou la moyenne mobile avec la ligne de tendance ?

Merci d'avance.

    double maH_fast=iMA(NULL,fast_maH_timeframe,fast_maH_period,0,fast_maH_method,fast_maH_price,0);

    if (ObjectFind("Tr_S1")==-1)
     {
      Create_Tr_S("Tr_S1",White,timf2s,TF2S,timf1s,TF1S);
     }

    if(maH_fast>"Tr_S1")
     {...}
 
ikatsko:

COMMENT COMPTEZ-VOUS LE NOMBRE DE POSITIONS LONGUES RENTABLES ET SÉPARÉMENT LE NOMBRE DE POSITIONS COURTES RENTABLES ?

La stratégie est la suivante : si le nombre de positions longues rentables depuis le début de l'EA (ou mieux - pour tout l'historique du compte) est supérieur au nombre de positions courtes, alors seules les positions longues doivent être autorisées à être ouvertes. Et vice versa.

Il est clair comment compter ces transactions, si elles sont fermées par le Conseiller Expert : Fermer - Compter. Mais si une position est fermée par le TP ou le SL, alors ... ?

Peut-être que quelqu'un a un code prêt de la fonction ?


int ProfitableOrdersOfLongs(){
   int i,Orders=0; 
   for(i=0;i<OrdersHistoryTotal();i++){
      if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))continue;
      if(OrderSymbol()!=Symbol())continue;
      if(OrderMagicNumber()!=Magic)continue;
      if(OrderType()==0)if(OrderProfit()>0) Orders++;              
    }  
return(Orders);} 
//====================================================================================================== 
int ProfitableOrdersOfShorts(){
   int i,Orders=0; 
   for(i=0;i<OrdersHistoryTotal();i++){
      if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))continue;
      if(OrderSymbol()!=Symbol())continue;
      if(OrderMagicNumber()!=Magic)continue;
      if(OrderType()=1)if(OrderProfit()>0) Orders++;              
    }  
return(Orders);} 
 
nemo811:

Pouvez-vous me dire comment comparer correctement le prix actuel ou la moyenne mobile avec la ligne de tendance ?

Merci d'avance.

Une ligne de tendance a un point de départ avec des coordonnées temps-prix et un point d'arrivée avec des coordonnées temps-prix.

Vous pouvez utiliser l'équation de la ligne droite avec les mêmes coordonnées pour trouver le niveau de prix à n'importe quel point situé entre ces deux coordonnées du segment construit et comparer les niveaux de prix de MAA et le point de croisement de la barre souhaitée avec cette ligne...

Vous pouvez lire - il y a une description détaillée d'un tel exemple.

 
Roman.:

Vous prenez le dernier ordre clôturé, comparez son heure de clôture avec le précédent en utilisant OrderCloseTime(), si c'est le même, vous le comparez avec l'heure de clôture de votre précédent ordre clôturé... comme ça, naturellement, c'est tout en boucle - du dernier fermé au premier, on va l'un après l'autre et on compare le temps de fermeture des commandes... Autre chose - imprimez les valeurs temporelles des derniers ordres dont vous savez à l'avance qu'ils se sont fermés en même temps (selon votre estimation), disons trois ordres, cela peut être différent, même si vous comprenez que c'est " simultanément", c'est-à-dire, comme je le comprends, que l'ordre se ferme à n'importe quel moment, c'est-à-dire. En fait, l'heure de clôture de, disons, trois ordres en même temps ne peut pas être la même - essayez d'imprimer() et voyez les valeurs de vos trois ordres TIME - leurs valeurs de caractéristiques OrderCloseTime(), c'est-à-dire que nous pourrions avoir à introduire le concept de TEMPS de clôture, c'est-à-dire la déviation de l'heure de clôture de plusieurs ordres par une petite valeur quand nous pouvons considérer qu'ils ont clôturé simultanément. Expérimentez et voyez par vous-mêmes à partir d'ici.

Merci, cela a fonctionné, mais maintenant cela ouvre une commande multiple.

Je l'ai fait comme ça

OrderSelect(OrdersHistoryTotal()-1, SELECT_BY_POS, MODE_HISTORY);//выбрать последний ордер 
tik=OrderCloseTime();
for (int l=OrdersHistoryTotal(); l>=0; l--) 
{
OrderSelect(l, SELECT_BY_POS, MODE_HISTORY);
if (OrderType()==OP_BUY||OP_SELL)
 {
  if (OrderMagicNumber()==1)
   {
   if (OrderProfit()<0)
    {
     if (OrderClosePrice()!= OrderStopLoss())
     {
     if (tik<=OrderCloseTime())
     {
 
vik-777:

Merci, cela a fonctionné, mais maintenant une commande multiple s'ouvre.

Je l'ai fait comme ça

Problème résolu. Merci à tous.

OrderSelect(OrdersHistoryTotal()-1, SELECT_BY_POS, MODE_HISTORY);//выбрать последний ордер 
tik=OrderCloseTime();
for (int l=OrdersHistoryTotal(); l>=0; l--) 
{
OrderSelect(l, SELECT_BY_POS, MODE_HISTORY);
if (OrderType()==OP_BUY||OP_SELL)
 {
  if (OrderMagicNumber()==1)
   {
   if (OrderProfit()<0)
    {
     if (OrderClosePrice()!= OrderStopLoss())
     {
     if (tik<=OrderCloseTime())
     {
     a = OrdersHistoryTotal();
     if (a>w)
     {
     if (sarik>0)
      {   
      OrderSend(Symbol(),OP_BUY,Lot1,NormalizeDouble(Ask,4),1,Ask - SL1*Point,Ask + 10*Point,0,2);
      w++;
      }
 
nemo811:

Pouvez-vous me dire comment comparer correctement le prix actuel ou la moyenne mobile avec la ligne de tendance ?

1. if(maH_fast>"Tr_S1") {...} -- erreur : maH_fast est un nombre réel, "Tr_S1"- valeur du type chaîne de caractères ;
2. double ObjectGetValueByShift( string name, int shift)
La fonction calcule et renvoie la valeur du prix pour la barre spécifiée (décalée de la barre actuelle). La valeur du prix est calculée à l'aide de l'équation linéaire basée sur les première et deuxième coordonnées. S'applique aux lignes de tendance.
Paramètres :
name - Nom de l'objet.
shift - Numéro de la barre.
Exemple : double price=ObjectGetValueByShift("MyTrendLine#123", 11) ;
 
Bonjour, j'ai une question... disons que iHighest et iLowest peuvent être utilisés pour trouver le numéro de barre avec la valeur maximale de high/low pour une certaine période, mais comment puis-je trouver la valeur maximale de l'indicateur st Dev pour un certain nombre de barres ?
 
double maxdev,mindev=1;
for(int i=0;i<counbar;i>0)
{
double val=iStdDev(NULL,0,10,0,MODE_EMA,PRICE_CLOSE,i);
if(mindev>val)mindev=val;
if(maxdev<val)maxdev=val;
}
Print("maxdev - ",maxdev," mindev - ",mindev);
Quelque chose comme ça.
 
7sintez:

J'ai tout regardé, j'ai tout fait... Il n'ouvre pas de poste, c'est tout ! Il se ferme correctement, mais il ne s'ouvre pas... Je ne sais pas quoi faire ! Peut-être que quelqu'un trouvera un bug dans le programme ?




Il ouvre et ferme correctement les ordres sur 5 min EURUSD. Légers problèmes de modification, essaie souvent de modifier avec les mêmes valeurs, donc erreurs fréquentes.
 

Bonjour à tous. Aide pour un débutant, s'il vous plaît :

En résumé.

1) La période est de 1 jour.

2) Il existe un ordre ouvert OrderSend(...). Il a SL et TP. Comme condition supplémentaire au stop et à la perte, nous devons définir l'ordre pour qu'il soit actif à partir du moment où il a été ouvert jusqu'à 18 heures, puis le fermer au prix actuel.

Cela signifie qu'une des trois conditions suivantes doit être remplie :

1. un stop loss est déclenché

ou

2. le take profit est déclenché

ou

3. puisque ni le Stop Loss ni le Take Profit n'ont été déclenchés, la position est fermée 18 heures après son ouverture au prix actuel.

Voici comment régler cette condition temporelle.


Question 2 :

Comment énoncer correctement la condition selon laquelle l'événement doit se produire si( période de 1 jour) :

- CLOSE de la barre actuelle est supérieure à C de la barre précédente et supérieure à C de la barre précédente, et C de la barre précédente est également supérieure à C de la barre précédente.


S'il te plaît, ne sois pas en colère. J'étais assis sur Rumus avant, et je suis en train de reconstruire...