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

 
//-------Пример(мой) приказа на открытие позиции с привязкой закрытия ----------------------------------------------------- 
                                                      
                                                      //Локальная переменная, открывающая ордер БАЙ
   int OrdBuy_1() = (OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Bid-1500*Point,Bid+1500*Point));
   
        //-------Тогда закрытие именно для этого приказа может быть таким:-----------------------------------------------------
    
    if (OrdBuy_1()==true)                              //Если был открыт ордер №1, то...
     {                                                 //...выполнить следующее:...
                                                       //...при условии, что Желтая выше красной, с сужением(условие1)...
                                                       //...и есть верхний перелом Средней (условие2)...
                                                       //...ИЛИ при условии, что Желтая выше красной, с расширением(условие1а)...
                                                       //...и есть верхний перелом Боллинджера (условие2а)... 
     if ((Yellow_0>Red_0) && (Yellow_0-Red_0)<(Yellow_1-Red_1) && (MA_2 < MA_1 && MA_1 > MA_0) || (Yellow_0>Red_0) && (Yellow_0-Red_0)>(Yellow_1-Red_1) && (MB_2 < MB_1 && MB_1 > MB_0))
        {                              
       bool Ans=OrderClose(OrdBuy_1,Lots,Bid,0);       //...закрыть ордер №1 по цене Bid (лок.переменная)и выдать сообщение                                                      
         Alert("Попытка закрыть ордер БАЙ лотом("Lots"), с ценой открытия("Ask"). Ожидание ответа..");
        }
      }
   if (Ans==true)                                     // Если получилось,... 
        {                                             //... выдать сообщение
         Alert ("Закрыт ордер БАЙ лотом("Lots"),с ценой открытия("Ask"), цена закрытия("Bid"));
        }
 
Il s'agit d'un exemple légèrement modifié par rapport au message ci-dessus.
 
rapid_minus:

r772ra etartmedia70, merci pour ces précisions.

Si j'ai bien compris, la magie est surtout nécessaire lorsqu'un trader utilise plusieurs EA, avec plusieurs ordres ouverts, sur plusieurs paires de devises, plusieurs comptes, etc.

Je ne le pense pas, et si je pense que mon conseiller expert fonctionnera de manière rentable, cela me suffira. Je suis toujours en train de le développer pour une paire, un compte dans une société de courtage et un seul ordre doit être ouvert et le magicien (ou tout autre identifiant pour une position ouverte) est nécessaire pour qu'il ne se ferme qu' à l'apparition de certaines conditions pour cet ordre même et d'autres conditions qui sont valables pour la fermeture d'autres ordres (qui peuvent être ouverts seulement après la fermeture de cet ordre) ne sont pas valables pour cet ordre.

Par exemple, un ordre peut être ouvert lorsque les conditions (a+b+c+d+d) ou (a+d+e) ou (f+c+i+c) apparaissent et, selon les conditions auxquelles le BAY est ouvert, il doit se fermer selon ses propres conditions :(a+b+c+d) par (f+j+l),(a+d+e) par (h+l+m+n),(g+z+i+k) par (p+r+c+t) .

Il me semble que la boucle d'ordre n'est pas nécessaire ici non plus. Il doit y avoir une solution simple qui ne prend pas beaucoup de place. J'ai exposé ma vision ci-dessus, mais je ne suis pas encore passé à l'analyse, et en plus des erreurs logiques, je dois avoir des erreurs de syntaxe (il peut manquer des parenthèses ou un mauvais jeu de variables, etc.)

Ne considérez pas cela comme un problème, aidez-nous s'il vous plaît. Je suis coincé sans elle. Merci

Déterminer le ticket de la dernière position ouverte et le traiter. IMHO - stocker le numéro de ticket dans une variable est mauvais, car il est facile de le perdre en cas de panne. Pour travailler avec un ordre, il faut d'abord le sélectionner. Et vous pouvez le sélectionner soit par index, soit par ticket. Le billet doit être connu exactement. Après une sélection réussie à l'aide du ticket, nous devons également vérifier si la position avec ce ticket a été fermée. S'il n'y a qu'une seule position sur le marché, le cycle n'est pas une opération qui prend du temps. Mais nous n'avons pas besoin de stocker le numéro du ticket dans une variable. Vous pouvez sélectionner le dernier ordre dans la liste, mais il existe une dépendance de tri, qui peut être modifiée (auparavant, il y avait une dépendance de tri dans le terminal, puis elle a été supprimée, puis elle est réapparue, puis elle a été supprimée à nouveau) - croyez-vous qu'elle ne réapparaîtra pas ? Je ne le fais pas. Dans le cycle, il n'y aura qu'une seule itération avec une seule position sur le marché - est-ce beaucoup ?

La condition d'achat ferme est-elle arrivée ?
Si c'est le cas, nous chercherons le ticket de la dernière position d'achat ouverte.
Si non, nous reprenons au début.
Si nous avons trouvé le ticket, nous faisons ce dont nous avons besoin dans la situation donnée dans l'ordre suivant
Sinon, retournez au début

 
rapid_minus:
Il s'agit d'un exemple légèrement modifié par rapport au message ci-dessus.

Qu'est-ce que la fonction OrdBuy_1() ? Ce n'est pas une variable mais une fonction. Cette construction est complètement fausse. Une fonction est définie en dehors de toute autre fonction, et non à l'intérieur.

 
artmedia70:

Déterminer le ticket de la dernière position ouverte et le traiter. IMHO - le stockage du numéro de ticket dans une variable est mauvais, car il est facile de le perdre avec n'importe quelle panne. Pour travailler avec l'ordre, il faut d'abord le sélectionner. Et vous pouvez le sélectionner soit par index, soit par ticket. Le billet doit être connu exactement. Après une sélection réussie à l'aide du ticket, nous devons également vérifier si la position avec ce ticket a été fermée. S'il n'y a qu'une seule position sur le marché, le cycle n'est pas une opération qui prend du temps. Mais nous n'avons pas besoin de stocker le numéro du ticket dans une variable. Vous pouvez sélectionner le dernier ordre dans la liste, mais il existe une dépendance de tri, qui peut être modifiée (auparavant, il y avait une dépendance de tri dans le terminal, puis elle a été supprimée, puis elle est réapparue, puis elle a été supprimée à nouveau) - croyez-vous qu'elle ne réapparaîtra pas ? Je ne le fais pas. Il n'y aura qu'une seule itération dans la boucle lorsqu'il n'y a qu'une seule position sur le marché - est-ce beaucoup ?

La condition d'achat ferme est-elle arrivée ?
Si c'est le cas, nous chercherons le ticket de la dernière position d'achat ouverte.
Si non, nous reprenons au début.
Si nous avons trouvé le ticket, nous faisons ce dont nous avons besoin dans la situation donnée dans l'ordre suivant
Sinon, retournez au début

Merci, je vais essayer de le refaire. Pourtant, même si je vais essayer de refaire selon votre explication, exprimez mes erreurs dans l'exemple ci-dessus pour ne pas les répéter.

Merci

 
rapid_minus:

Merci, je vais essayer de le refaire. Pourtant, même si je vais essayer de refaire selon votre explication, exprimez mes erreurs dans l'exemple ci-dessus pour ne pas les répéter.

Merci

Je dois y aller, je n'ai pas le temps. En bref - si la variable est int, pourquoi la vérifier comme bool ? Les valeurs de Stop Loss et Take Profit doivent être normalisées. Je n'ai pas cherché plus loin.
 

J'ai bricolé avec la ligne de tendance et j'ai appris comment l'obtenir. Mais il s'avère que les objets graphiques ne fonctionnent pas pendant l'optimisation dans le testeur.

Que dois-je faire ? Cela vaut-il la peine de l'obtenir dans un indicateur ?

Buffer[i]= ObjectGetValueByTime(chart_ID,name,Time[1],sub_window);

L'optimisation fonctionnera-t-elle de cette manière ?

 
artmedia70:
Je dois y aller, je n'ai pas le temps. En bref, si la variable est int, pourquoi la vérifier comme bool ? Les valeurs de Stop Loss et Take Profit doivent être normalisées. Je n'ai pas cherché plus loin.

Eh bien, je suis complètement confus : OrdBuy_1( ) est la fonction qui ouvre le BAY sur les conditions #1 au-dessus de cette fonction. Seulement, le type correct est probablement double plutôt qu' int, car il renvoie le prix d'ouverture de l'ordre. Et d'après ce que j'ai compris, je ne l'ai inséré dans aucune fonction ; il est placé séparément, après int start(), extrayant les valeurs de tous les indicateurs nécessaires et analysant la situation actuelle du marché (est-ce que je me trompe ?).

Et comment normaliser les arrêts et les prises de vue, ou mieux encore, comment ne pas les régler du tout ?

Et je ne comprends pas pour le chèque. J'ai dû mal comprendre le tutoriel - "bool OrderClose (int ticket, double lots, double prix, int slippage, color Color=CLR_NONE)Fonction de clôture d'un ordre de marché. " Qu'est-ce qu'un chèque ?

Bref, plus on avance, plus c'est bête :(.

 
Forexman77:

J'ai bricolé avec la ligne de tendance et j'ai appris comment l'obtenir. Mais il s'avère que les objets graphiques ne fonctionnent pas pendant l'optimisation dans le testeur.

Que dois-je faire ? Cela vaut-il la peine de l'obtenir dans un indicateur ?

L'optimisation fonctionnera-t-elle de cette manière ?

Calculer une ligne virtuelle au lieu de la ligne réelle.
 
Forexman77:

J'ai bricolé avec la ligne de tendance et j'ai appris comment l'obtenir. Mais il s'avère que les objets graphiques ne fonctionnent pas pendant l'optimisation dans le testeur.

Que dois-je faire ? Cela vaut-il la peine de l'obtenir dans un indicateur ?

L'optimisation fonctionnera-t-elle de cette manière ?

Non, il ne le fera pas. Les graphiques ne sont affichés qu'en mode visualisation.
Raison: