[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 742

 
artmedia70:

Je ne veux pas m'occuper de votre code (maléfique, mais honnête :)). Dites-moi exactement ce que vous voulez obtenir à la fin et je vous écrirai la fonction dont vous avez besoin. Honnêtement - ce sera plus facile pour moi. Je devrais m'occuper de mon propre code... :)

... Ou alors, allez vous coucher, dormez un peu, et le lendemain, toutes vos énigmes se mettront en place... :) C'est ce que je fais quand je ne comprends pas... Au fait, je vais me coucher - il est déjà 5 heures et demie du matin...


Une fois l'ordre établi, les variables qui ont servi de critères pour l'ordre doivent être remises à "0",

 
Qui sait ? Comment puis-je obtenir le rapport entre le mouvement de l'indicateur (sur son échelle), par exemple le RSI, et le rapport entre les ticks des devises passées ? Par exemple, si le RSI est passé de 0 à 50, combien de ticks cela représente-t-il ?
 
Infinity:
Qui sait ? Comment puis-je obtenir le ratio du mouvement de l'indicateur (sur son échelle), par exemple le RSI, avec le ratio des ticks passés de la devise ? Par exemple, si le RSI passe de 0 à 50, à combien de points correspondra-t-il ?

Attrapez la dernière valeur de l'indicateur RSI sur une bougie zéro. Nous attendons le prochain tic-tac. Le tic-tac est arrivé. Le prix de l'action a augmenté d'un point exactement. Regardez de combien le RSI a changé. C'est tout - les chances sont dans notre poche.
 
drknn:

Attrapez la dernière valeur de l'indicateur RSI sur la bougie zéro. Nous attendons le prochain tic-tac. Le tic est là. Supposons que le prix ait augmenté d'un point exactement. Regardez de combien le RSI a changé. C'est tout - le coefficient est dans notre poche.

Mais alors comment est-il possible, par exemple, j'ai attrapé le coefficient de 1 point, le RSI est passé sur son échelle de 50, il s'avère qu'il a passé 50 points, mais en fait c'était un plat. Et la bougie a 2 points. Alors comment déterminer dans ce cas
 
cyclik33:

Cher Anatoly. Merci beaucoup pour ce code. Autre question, comment faire pour que cela fonctionne tout le temps mais en ne faisant qu'une seule transaction par barre ?

Boris, eh bien, c'est encore plus simple que cela. Vous laissez tomber cette ligne :

datetime new;

Tout en haut du code (à part, pas dans une fonction).
Ensuite, aux endroits où il y a un appel de la fonction OrderSend(...), il suffit de l'entourer d'un câlin supplémentaire de l'opérateur if.

if(new != Time[0]){
   new = Time[0];
   // здесь функция OrderSend(...);
}

Maintenant, avant d'ouvrir une autre position, il vérifiera si la barre actuelle contient des transactions ou non. Si c'est le cas, la barre actuelle sera stockée dans la variable new et si la barre actuelle est la même que celle stockée, la transaction ne sera pas ouverte. En conséquence, si la barre est nouvelle, alors son heure d'ouverture ne coïncidera pas avec les données de la variable new, la transaction sera ouverte et la variable new obtiendra une nouvelle valeur.

Je ne connais pas exactement l'architecture de votre Expert Advisor, mais cette méthode devrait fonctionner dans la plupart des cas.

 
FoxUA:

Une fois l'ordre établi, les variables qui étaient les critères de l'ordre doivent être remises à "0",


J'ai essayé de compiler votre code, il a généré des erreurs.
Vous devez utiliser les variables qui ont été utilisées comme critère pour passer une commande dans deux méthodes(start() et NewOrder1()), déclarez-les en dehors de toutes les fonctions :

bool b,s, //соответственно бай или селл  
bs,// если закрытие по стоплоссу ордера бай
ss,// если закрытие по стоплоссу ордера sell
bt,
st;//      то же по ТП
double bl,sl; // лоты соответсвенно для бай и селл
puis dans la boucle for
for(int cnt=OrdersHistoryTotal();cnt>0;cnt--)
     {
OrderSelect(cnt, SELECT_BY_POS, MODE_HISTORY);
{if(OrderMagicNumber()== mag &&
OrderSymbol()==Symbol()) 
{ if (OrderType() == OP_BUY )  {b=1; if (OrderClosePrice()==OrderTakeProfit()) bt=1; if (OrderClosePrice()==OrderStopLoss()) bs=1; bl=OrderLots()*10; break;}
if (OrderType() == OP_SELL)  {s=1; if (OrderClosePrice()==OrderTakeProfit()) st=1; if (OrderClosePrice()==OrderStopLoss()) ss=1; sl=OrderLots()*10; break;}
            }
         }
      }


}//end

Les valeurs nécessaires doivent leur être attribuées et, une fois l'ordre ouvert avec succès dans la fonction NewOrder1(), elles doivent également être remises à zéro.

int NewOrder1(int Cmd,double Lot)
{double TP=0; //тейкпрофит
double SL=0; //стоплосс
double PR=0; //Цена
double LT=0; //Лот
while(!IsTradeAllowed()) Sleep(100);
if(Cmd==OP_BUYLIMIT)
   {PR=Ask-Point*h;
    if(TakeProfit>0) TP=PR+TakeProfit*Point;
    if(StopLoss>0) SL=PR-StopLoss*Point;
    if(Lot>0) LT=3*Lot;}
int tic1=OrderSend(Symbol(),Cmd,LT,PR,3,SL,TP,0,mag,0,CLR_NONE);
//-----------
if(tic1<0){
   Print(GetLastError());
}else{
b=0;
s=0; 
bs=0;
ss=0;
bt=0;
st=0;
bl=0;
sl=0;
}
//-----------
return(0);}

Quelque chose comme ça.

 
Infinity:

Qui sait ? Comment obtenir le rapport du mouvement de l'indicateur (sur son échelle), par exemple le RSI, avec le rapport des ticks traversés par la devise ? Pour clarifier, si le RSI passe par exemple de 0 à 50, combien de ticks seront égaux.

J'ai eu un jour un objectif similaire, j'ai donc écrit une "règle" comme celle-ci, peut-être que cela vous conviendrait aussi.

//+------------------------------------------------------------------+
int get_pips_RSI_path(int home_shift, int end_shift){
   double home_index, end_index;
   double home_price, end_price;
   int path;
   
   home_index = iRSI(NULL,0,14,PRICE_CLOSE,home_shift);
   home_price = Close[home_shift];
   end_index = iRSI(NULL,0,14,PRICE_CLOSE,end_shift);
   end_price = Close[end_shift];
   
   if(end_price > home_price)path = (end_price - home_price)/Point; else path = (home_price - end_price)/Point;
   
   Alert("Между значениями RSI ", home_index, " и ", end_index, " было пройденно ", path, " пунктов.");
   return(path);
}
//+------------------------------------------------------------------+

Comme paramètres, vous envoyez des décalages de barres avec les valeurs RSI souhaitées, en réponse vous obtenez la distance entre elles en pips.

 
ToLik_SRGV:

J'ai eu un jour un objectif similaire, j'ai donc écrit une "règle" comme celle-ci, peut-être que cela vous conviendrait aussi.

Comme paramètres, vous envoyez les décalages des barres où se trouvent les valeurs RSI souhaitées, en réponse vous obtenez la distance entre elles en pips.


Merci, je vais vérifier ce soir

J'ai le sentiment que le test sur l'historique du conseiller expert ne donnera pas un bon résultat en raison du caractère incomplet de l'historique des citations. Je comprends que l'historique des cotations est formé par l'archivage du marché actuel (cotations en chandeliers), mais comment pouvez-vous vous fier au résultat, si les vraies cotations (au moins dans mon cas) volent à travers, parfois pendant 40 minutes juste aucune bougie, le graphique se tient, puis il vole tous la même bougie.

 
ToLik_SRGV:

Peut-être n'avez-vous pas trouvé une combinaison de paramètres rentable, essayez de décocher l'option "Ignorer les résultats inutiles".

Et n'oubliez pas de cocher les cases dans les paramètres du conseiller expert pour les paramètres que vous souhaitez optimiser, ainsi que de définir les limites de pas et d'optimisation.

Merci, c'est exact, "Sauter les résultats inutiles" est coché.
 
artmedia70:


Mes amis, je n'arrive pas à trouver comment me débarrasser des signaux inutiles qui apparaissent lorsque la ligne de tendance est inversée. La ligne de tendance (descendante dans l'exemple) est tracée de l'extrémité la plus grande à l'extrémité la plus petite, situées dans un intervalle de barres spécifié. Le problème est que dès qu'un nouvel extrême inférieur apparaît, la ligne de tendance saute à cet extrême (elle est conçue de cette façon).

Mais, également sur la première barre, la ligne de tendance construit des niveaux avec la valeur de la ligne de tendance, dont le franchissement par la ligne indicatrice donne un signal. Si la ligne de l'indicateur sur la première barre est en dessous de ce niveau et sur la deuxième barre elle est au-dessus de ce niveau, alors nous avons un croisement top-down.

Alors... Lorsque la ligne de tendance saute vers un nouvel extrême inférieur, il se produit une situation où la ligne de l'indicateur sur la deuxième barre est au-dessus de la ligne de tendance et en dessous du niveau tracé et sur la première barre, c'est-à-dire un signal de vente inutile (dans ce cas) :


Nous pouvons voir sur l'image que la tendance s'est déplacée vers un nouvel extrême (l'emplacement est marqué par une flèche vers le bas) et le niveau de prix de la nouvelle tendance sur la première barre (ligne horizontale en tirets rouges).
est devenue inférieure à la ligne AD de la deuxième barre et la ligne AD de la première barre est inférieure au niveau de prix...
En conséquence, en déplaçant la ligne de tendance vers une extrémité inférieure, un signal indésirable a été simulé... Le même signal inutile s'est produit plus tôt -
Je l'ai marqué avec une ligne verticale bleu clair...

D'où la question : comment éviter cette situation ? Je suis épuisé à essayer de penser à quelque chose...
Des idées ? Merci... :)



Je comprends qu'un signal de transaction doit se produire lorsque la ligne de l'indicateur croise la ligne de tendance, et non l'inverse, et vous avez les deux. Conservez les valeurs précédentes de la position de la ligne de tendance dans les variables statiques et si elles n'ont pas changé, vérifiez si un croisement s'est produit, si la ligne de tendance a changé de position - réinitialisez...