[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 917

 
_SS_:
Comment créer une fonction et l'appeler ?
Lire un manuel... :)
 

artemida70, j'ai créé mon premier EA en utilisant le tutoriel de S. Kovalev. Il s'est avéré que sa fonction de critère fonctionnait avec des pertes. J'ai écrit ma fonction de critère. J'ai vérifié qu'il n'y avait pas d'erreurs et j'ai ensuite compilé le conseiller expert. Grâce à ce travail, j'ai obtenu :

- sur la fonction de critère : O - erreurs, 1 avertissement ;

-pour la compilation du conseiller expert : О - erreurs, О - avertissements.

Mais le travail dans le Strategy Tester n'est pas allé, mettre des ALERTS de test dans les fonctions int init, int start, int deinit. Je vois dans les réponses que le contrôle est transmis du Terminal à la fonction int init et que le contrôle n'est pas transmis à la fonction int start - aucune réponse ALERTE. Lorsque l'EA est déchargée, il y a une réponse de la fonction int deinit.

Veuillez me donner votre avis sur cette situation. J'ai vraiment besoin des conseils d'un professionnel expérimenté.

MERCI

artmedia70:
Lire un tutoriel... :)
 
artmedia70:
Ici, vous avez une structure étrange. Vous faites la boucle standard des commandes du terminal. De zéro à OrdersTotal() -1. Et puis vous vérifiez l'absence totale d'ordres dans le terminal de la boucle. Pourquoi ne pas vérifier le billet pour les commandes ? Ou un magik ? Et votre drapeau =0 pour une raison quelconque. Et pourquoi pas faux ? Cependant, c'est vous qui êtes le patron. Votre logique, vous devez la comprendre... :)

Merci pour le conseil)))) Exactement à ce stade :. De zéro à OrdersTotal() -1... C'est la raison pour laquelle le testeur n'a pas continué à passer des commandes)))).

J'utilise ce schéma parce que je l'ai appris dans les cours de quelqu'un d'autre. Si vous pouviez décrire une méthode plus rationnelle, je vous en serais très reconnaissant)))).

 

Je me suis fait avoir, je ne suis pas sorti de mql4 depuis presque un mois, je crois que je deviens fou ou quoi ?

Je n'ai aucune idée de ce que j'essaie de faire avec.

Je le fais savoir, donnez-moi au moins un indice, qu'est-ce qui ne va pas ? Gourous, aidez les nuls !

Je ne vois aucune erreur dans le journal.
 
extern double StopLoss=50.0 ;
extern double TakeProfit=50.0 ;
extern double Lots=1 ;
extern int total ;

int start()
{
double Price_1, Price_2, min, max ;
RefreshRates() ;
Price_1=Bid ;
Price_2=Ask ;

min=iLow(NULL,0,2) ;
max=iHigh(NULL,0,2) ;
total=OrdersTotal() ;
if(total<1)
{

if(Price_1>max)
OrderSend(Symbol(),OP_BUY,Lots,Ask,5,Bid-StopLoss*Point,Ask+TakeProfit*Point, "My order#",16384,0,Green) ;

if(Price_2<min)
OrderSend(Symbol(),OP_SELL,Lots,Bid,5,Ask+StopLoss*Point,Bid-TakeProfit*Point, "My order#",16384,0,Green) ;
}
}
retour(0) ;
 
boris.45:

artemida70, j'ai créé mon premier EA en utilisant le tutoriel de S. Kovalev. Il s'est avéré que sa fonction de critère fonctionnait avec des pertes. J'ai écrit ma fonction de critère. J'ai vérifié qu'il n'y avait pas d'erreurs et j'ai ensuite compilé le conseiller expert. Grâce à ce travail, j'ai obtenu :

- sur la fonction de critère : O - erreurs, 1 avertissement ;

-pour la compilation du conseiller expert : О - erreurs, О - avertissements.

Mais le travail dans le Strategy Tester n'est pas allé, mettre des ALERTS de test dans les fonctions int init, int start, int deinit. Je vois dans les réponses que le contrôle est transmis du Terminal à la fonction int init et que le contrôle n'est pas transmis à la fonction int start - aucune réponse ALERTE. Lorsque l'EA est déchargée, il y a une réponse de la fonction int deinit.

Veuillez me donner votre avis sur cette situation. J'ai vraiment besoin des conseils d'un professionnel expérimenté.

MERCI


J'aimerais voir ce que vous avez fait là... :)
Je ne comprends pas ce que cela signifie - la fonction de critères d'IC fonctionne avec les pertes. Après tout, toute fonction, si elle suit les critères d'ouverture, peut fonctionner correctement ou incorrectement, et donc comporter des erreurs. Mais la stratégie elle-même - elle peut être perdante ou profitable... La fonction de critères ne fait que suivre les critères définis par la stratégie et envoie des signaux à la fonction de négociation.
 
ViktorF:

Merci pour le conseil)))) Exactement à ce stade :. De zéro à OrdersTotal() -1... C'est la raison pour laquelle le testeur n'a pas continué à passer des commandes)))).

J'utilise ce schéma parce que je l'ai appris dans les cours de quelqu'un d'autre. Si vous pouviez décrire une méthode plus rationnelle, je vous en serais très reconnaissant)))).

Il existe de nombreux moyens. Tout dépend de ce que vous voulez trouver.

Dans tous les cas, vous pouvez commencer à parcourir les commandes en boucle.

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

puis vérifiez exactement ce que vous voulez trouver dans la boucle.

if (OrderSelect(i, SELECT_BY_POS) // Si l'ordre est sélectionné (ici, j'ai omis le paramètre de fonction MODE_TRADES puisqu'il est sélectionné par défaut)

et ensuite - vous vérifiez déjà les paramètres de l'ordre que vous avez besoin, par exemple, magik

if (OrderMagicNumber()==Magic) // si la commande a le numéro magique donné, alors... alors c'est l'ordre dont nous avons besoin...

Eh bien... Ou son type...

if (OrderType()==OP_BUY || OrderType()==OP_SELL) // si le type d'ordre est Achat ou Vente...

etc.

Bien que, nous pouvons le faire complètement différemment... Tout dépend de vos habitudes, et des exigences du code...

 
gheka:

Cela devrait fonctionner. Le smiley sourit-il ?
 

Bonjour à tous ! L'EA a le code suivant (voir ci-dessous). Si je comprends bien, le signal pour ouvrir une position est pris à partir des indicateurs de deux indices. Comment faire pour que les ordres soient ouverts sur la base d'un seul indicateur, par exemple le CCI ? Merci beaucoup.

int getSignal() {
   int Momentum = checkMomentum();
   int CCI = checkCCI();
   if (Momentum != CCI) return (0);
   return (Momentum);
}
int checkCCI() {
   double CCI = iCCI(NULL, 0, 60, PRICE_TYPICAL, 1);
   Print("CCI: ", CCI);
   if (CCI > 0.0) return (1);
   if (CCI < 0.0) return (-1);
   return (0);
}

int checkMomentum() {
   double Momentum = iMomentum(NULL, 0, 60, PRICE_TYPICAL, 1);
   Print("Momentum ", Momentum);
   if (Momentum > 100 && Momentum < 101) return (1);
   if (Momentum < 100 && Momentum > 99) return (-1);
   return (0);
}
 

Aide, l'EA ne ferme pas tous les ordres lorsqu'il atteint un profit.

void CloseAllOrders()
{
  for (int i = 0; i < OrdersTotal(); i++)
  {
    if (OrderSelect(i, SELECT_BY_POS))
    {
      if (OrdersTotal() > 1 && OrderSymbol() == Symbol() && AccountProfit() >= AccountBalance()*AllProfit/100)
      {
        if((OrderType()==OP_BUY || OrderType()==OP_BUYSTOP || OrderType()==OP_BUYLIMIT)) OrderClose(OrderTicket(), OrderLots(),Bid,0);
        if((OrderType()==OP_SELL || OrderType()==OP_SELLSTOP || OrderType()==OP_SELLLIMIT)) OrderClose(OrderTicket(), OrderLots(),Ask,0);
        if(UseSound == true)
        {
        PlaySound(SuccesSound);
        }        
      }
    }
  }
}