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

 

Merci ! Le code est plus simple maintenant. Certainement plus simple.

Merci pour le dérapage !

La boucle for (int A = 0 ; A <100 ; A++) // nous n'avons pas besoin de cette recherche de barres, cela m'aide seulement à voir dans le journal que l'EA a placé des ordres exactement là où se trouvent les flèches ou là où se trouve le numéro d'erreur. Le fait est qu'il n'y avait aucun signal dans le testeur. J'ai vu sur les mêmes impressions que les variables arrow1 et arrow2 n'étaient nulles que sur toutes les barres et c'est ainsi que je me suis sorti de la situation.

Le cycle peut bien sûr être compté dans les deux sens. Mais encore une fois, je vois l'erreur 129 partout ! Je vois les flèches de l'indicateur dans le graphique et je veux m'assurer que les ordres ont été passés par eux. Ainsi, sur une capture d'écran au début les variables flèche 1et2 sont égales, plus loin sur 17 barres à partir de zéro, l'ordre est fixé - okey, super ! Ensuite, les messages de l'imprimante indiquent qu'il y a une vente avec un certain nombre de tics, et les flèches sur les barres suivantes sont égales - génial !!!!.

 
Ensuite, vous devez supprimer une vente sur la flèche rouge et placer un achat. Soudain, deux commandes sont supprimées !!! Deux commandes, celle qui est clairement établie et une autre qui ne semblait pas être là ! !! D'accord, l'enfer avec ça... L'erreur 129 apparaît et il n'y a pas de commande. Je suis désolé si j'ai dérouté tous les bons bénévoles comme ça.
 
//+------------------------------------------------------------------+
//|                                                     советник.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#include <WinUser32.mqh>
  extern double  lot         = 1;                          
  extern int     taymfreym   = 0 ;                           
  extern double  stoplos     = 200 ;                          
  extern double  takeprofit  = 500 ; 
  extern int     magicnumber = 350;
  extern int     ControlBar  = 1;      // номер бара на котором снимаем показания индикатора                     


void BreakPoint()
{//if (!IsVisualMode()) return(0);
    keybd_event (19,0,0,0);
    Sleep (10);
    keybd_event (19,0,2,0);
}

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   Print (   "  НачалоНачал " ); 
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int i;
int start()
{
  //Print (   "  Начало " ); 
//----
    for (int A = 0; A <100 ; A++) // ни к чему этот перебор баров
    {
        double strela1 = iCustom (NULL, taymfreym, "индикатор", 2, A),
               strela2 = iCustom (NULL, taymfreym, "индикатор", 3, A);
        int BUY = 0, SELL = 0, ticket; 
        Print (A, "  strela1 " , strela1 , "    strela2  " , strela2);
    
    for (int i = OrdersTotal() - 1; i >= 0; i--)
    {  
        if (!OrderSelect (i - 1, SELECT_BY_POS)) continue;  // Если есть следующий
        if (OrderSymbol() != Symbol()) continue;      // Не наш фин. инструм
        if (OrderMagicNumber() != magicnumber) continue;
        int type = OrderType();
        if (type > 1) continue;
        ticket = OrderTicket();
        if (type == 0) {BUY++; Print ("BUY++   " , BUY  ,"  ticket ", ticket); break;}
        if (type == 1) {SELL++; Print ("SELL++   " , SELL  ,"  ticket ", ticket); break;}
    }
    if (strela1 < strela2)
    {
        if (SELL > 0) udalenie (OP_SELL);
        if (BUY == 0)
        {
            OrderSend (Symbol( ), OP_BUY, lot,NormalizeDouble(Ask, Digits), 3, NormalizeDouble( Bid- (stoplos*Point),Digits),   NormalizeDouble( Ask+( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE);           
            Print ("strela1>strela2&&BUY==0&&SELL==0   " , GetLastError()  ,"  Ask ",Ask,"   stoplos= NormalizeDouble( Bid- (stoplos*Point),Digits)  ",
            NormalizeDouble ( Bid- (stoplos*Point),Digits),"    takeprofit= NormalizeDouble( Ask+( takeprofit*Point),Digits) ", NormalizeDouble( Ask+( takeprofit*Point),Digits));
        }
    }
    else if (strela1 > strela2)
    {
        if (BUY > 0) udalenie (OP_BUY);
        if (SELL == 0)
        {
            OrderSend (Symbol( ), OP_SELL, lot, NormalizeDouble (Bid, Digits), 3, NormalizeDouble( Ask+ (stoplos*Point),Digits),   NormalizeDouble( Ask-( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE) ; 
            Print ("strela1>strela2&& OP_SELL  " , GetLastError()   ,"  Bid ",Bid,"    stoplos=   NormalizeDouble( Ask- (stoplos*Point),Digits)  ",
            NormalizeDouble (Ask- (stoplos*Point),Digits),"    takeprofit= NormalizeDouble( Bid+( takeprofit*Point),Digits) ", NormalizeDouble(Ask+( takeprofit*Point),Digits));
            Print( "strela1>strela2&& OP_SELL   " , GetLastError()  ," (stoplos*Point) ",(stoplos*Point),"   Point  ", Point,"   Digits  ", Digits);
        }
    }
    }
    BreakPoint();     
//----
    return (0);
}
//+------------------------------------------------------------------+

void udalenie (int Type = -1)
{
    int total = OrdersTotal();
    for (i = total - 1; i >= 0; i--)
    {
        if (!OrderSelect (i, SELECT_BY_POS)) continue;
        if (OrderSymbol() != Symbol()) continue;      // Не наш фин. инструм
        if (OrderMagicNumber( ) != magicnumber) continue;
        int type = OrderType();
        if (type > 1) continue;
        if (Type > -1) if (Type != type) continue;
        bool result = false;
        switch (type)
        { 
            case OP_BUY       : result = OrderClose (OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 3, CLR_NONE ); break;
            case OP_SELL      : result = OrderClose (OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 3, CLR_NONE ); break; 
        }
        if (!result)
        {
            int error =  GetLastError(); 
            string errorcomment = "Неудалось закрыть ордер №" + OrderTicket() + " " + Symbol() + " " + OrderType() + " " + error; 
            Print (errorcomment);
        }  
    }       
}
 
Attendez, excusez-moi, je vais mettre les feuillets partout !
 
Dimka-novitsek:
Ensuite, vous devez supprimer une vente sur la flèche rouge et placer un achat. Soudain, deux commandes sont supprimées !!! Deux commandes, celle qui est manifestement fixée et une autre qui ne semblait pas être là ! !! D'accord, l'enfer avec ça... L'erreur 129 apparaît et il n'y a pas de commande. Vous me pardonnerez de déconcerter tous les bons bénévoles...

Dimka - donne-moi ton code dans mon message personnel - je vais m'amuser - je n'ai rien à faire pendant que mon"graal" est testé ... et mon cerveau a besoin d'une séance d'entraînement... Et n'oubliez pas l'indulgence...
 

Bonjour à tous, je suis un nouveau venu, alors s'il vous plaît, ne me donnez pas de coups de pied sauvages. Quelques questions se sont accumulées.

1) Où puis-je télécharger l'historique complet des devis. J'ai compris que dans le terminal MT4 les cotations de MetaQuotes sont téléchargées par défaut mais il y a un vide de janvier 2012 à octobre 2012 et il n'est pas fermé lors du retéléchargement. Cela remet en question toute l'histoire à partir de là.

2) L'histoire a des dates avant 1999, les données pour eux certains étranges, très peu, même par minutes. Est-ce que quelqu'un les prend en compte ou les supprime ?

3) Et d'autres bêtises se passent avec le test. J'ai décidé d'essayer d 'écrire un simple Expert Advisor: Acheter quand Open[1]<MA1 && Close[1]>MA1. Lors des tests, la MA (exponentielle) montre toujours des valeurs différentes selon la date initiale du test. Plus la période de МА est longue (par exemple 1000-1200), plus l'erreur est importante. Quel est le problème ?

 
Dimka-novitsek:

Merci ! Le code est plus simple maintenant. Certainement plus simple.

Merci pour le dérapage !

La boucle for (int A = 0 ; A <100 ; A++) // nous n'avons pas besoin de cette recherche de barres, cela m'aide seulement à voir dans le journal que l'EA a placé des ordres exactement là où sont les flèches ou là où se trouve le numéro d'erreur. Le fait est qu'il n'y avait aucun signal dans le testeur. J'ai vu sur les mêmes impressions que les variables arrow1 et arrow2 n'étaient nulles que sur toutes les barres et c'est ainsi que je me suis sorti de la situation.

Le cycle peut bien sûr être compté dans les deux sens. Mais encore une fois, je vois l'erreur 129 partout ! Je vois les flèches de l'indicateur dans le graphique et je veux m'assurer que les ordres ont été passés par eux. Ainsi, sur une capture d'écran au début les variables flèche 1et2 sont égales, plus loin sur 17 barres à partir de zéro, l'ordre est fixé - okey, super ! Ensuite, les messages de l'imprimeur indiquent qu'il y a une vente avec un certain nombre de tics, et les flèches sur les barres suivantes sont égales - génial !!!!.

A propos du cycle :

for (int A = 0; A <100 ; A++)

Avant de faire quelque chose (écrire du code), vous devez avoir une idée claire de ce que vous voulez obtenir. Vous avez cet indicateur sur chaque tick, et vous pouvez avoir une présentation complète de ses lectures. De cette façon (boucle) vous aurez en sortie dans les variables strela1 et strela2 les lectures à la 100ème barre et vous pourrez trader par ces lectures (l'hiver dernier)... Je n'ai pas fait attention tout de suite - vous avez inclus des opérations de trading dans la boucle de lecture des indicateurs - un total P.... Bien sûr, vous êtes le mieux placé pour le savoir. :)))

 
Non, j'ai besoin de la boucle pour voir l'entrée/sortie, c'est-à-dire pour tester le robot. Comment il passe des commandes, comment il fait des erreurs. Eh bien, il n'est pas testé dans le testeur...
 
Dimka-novitsek:
Non, j'ai besoin de la boucle pour voir l'entrée/sortie, c'est-à-dire pour tester le robot. Comment il passe des commandes, comment il fait des erreurs. Il n'y a pas de test dans le testeur...

Que puis-je dire - GENIAL... Bonne chance !

P.S. Dans mon code, j'ai trouvé une petite erreur en rapport avec le changement de direction de l'énumération des ordres, j'ai même réduit le code, et j'ai essayé de créer une optimisabilité dans le testeur (vérifiez vous-même).
Et j'ai le sentiment que vous ne lisez pas correctement les données de l'indicateur. L'indicateur a plusieurs buffers (4 dans ma version). Certains, comme ceux qui dessinent des flèches, ont une valeur UNIQUEMENT là où se trouve la flèche. Pour rechercher des signaux dans de tels tampons, vous devez organiser une boucle (while()) avec une condition selon laquelle la valeur de retour n'est pas égale (dans ma variante EMPTY_VALUE) à une valeur "vide". Lorsqu'il n'y a "aucune flèche" (dans ces tampons), le signal doit être recherché en comparant la valeur de retour avec le prix.

Dossiers :
lxvhlxyx.mq4  5 kb
 

Bon jour ou nuit ! Une question pour les développeurs de mt4 et pour tous les autres.

Quelle est la configuration minimale requise pour le client MT ?

Je veux le faire fonctionner sur mon ancien matériel : Athlon 800mg, 512mb, XP SP3. Quand je lance MT 4 ou 5, il s'arrête au bout de 2 secondes. Le problème n'est clairement pas dans le windup ou le matériel, ce matériel fait tourner Visual Studio avec débogueur (je suis moi-même programmeur), et l'exception ne survient pas dans le système (puisque mon débogueur ne fonctionne pas). Je suppose que le client lui-même n'aime pas quelque chose et qu'il ferme en conséquence. La question est donc de savoir quelle est la raison et ce que mt n'aime pas, vraiment la fréquence du CPU ? ))