[ARCHIVE]Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 5. - page 134

 
artmedia70:
Une fois encore, je vous demande : quand exactement voulez-vous passer la commande ? Ne répondez pas avec votre code (je ne veux pas le comprendre - nous avons suffisamment de nos propres codes à analyser), mais simplement en mots,

Par exemple : je veux mettre une pause au-dessus/au-dessous de la MA à cette distance, à condition que ... ... yada yada yada yada ...

Pour la deuxième fois, je vous demande de vous expliquer. Nous aurions résolu votre problème depuis longtemps.


En ce moment, le problème est le suivant : fastMa croisé slowMa monté... ...donc on cherche où acheter. Ensuite, nous attendons que le prix, c'est-à-dire le Ask (puisque nous envisageons d'acheter) atteigne fastMa ( enfin, je suppose qu'il n'y aura pas de valeur exacte, nous avons besoin +- d'un certain écart, il est renommé i_thresholdFromMa) et dès que le prix atteint fastMa +- i_thresholdFromMa , le conseiller expert doit placer BUYSTOP à (fastMa + buyHear * pt).

Ce que j'ai mis au point ne fonctionne pas dans un terminal et ne fonctionne pas toujours dans un autre. Quelque chose ne va pas en général.

La dernière variante de la fonction buyHear ici :

//+-------------------------------------------------------------------------------------+
//| Открытие длинной позиции                                                            |
//+-------------------------------------------------------------------------------------+
bool OpenBuy()
{
   int ticket = -1;
   double OOP = fastMa + buyHear * pt;
   
   if ((ND(OOP) - Ask) >= g_stopLevel)           
   {
       if (ND(OOP) > Ask)           // Проверка что цена открытия выше Ask, т.к. у нас вход отложенником
       {
           ticket = OrderSend(Symbol(), OP_BUYSTOP, 0.1, ND(OOP), 3, 0, 0, NULL, i_magic, 0);
       }
   }
   if (ticket > 0)
   {
       return (true);
   }
   else
    
   Alert (GetLastError());
}
Voici les paramètres d'entrée :
extern double i_thresholdFromMa = 5;                           // Отступ от МА
extern double buyHear = 10,                                    // Расстояние от МА до отложки на бай

int init()
{
   if (Digits == 1 || Digits == 3 || Digits == 5)
       pt = Point * 10;
}

Les erreurs sont visibles sur la capture d'écran (dans OrderSend() le prix est alimenté au-dessus de la perle rouge, alors que l'ordre tel que vu sur la capture d'écran est en dessous de....) :

prix d'ouverture conjoint

artmedia70:
Et une autre chose : si vous avez fastMA et slowMA définis comme globaux, pourquoi les passer dans les fonctions ? Toutes les fonctions peuvent les voir de toute façon, sans passer leurs paramètres à la fonction appelée.

Et avant, ils n'étaient pas globaux, ils étaient déclarés dans des fonctions spécifiques, pas au départ. Mais comme ils n'étaient utilisés dans aucune des fonctions, les obtenir à chaque fois était en quelque sorte, disons, un signe de "mauvaises manières en tant que programmeur" et il n'est pas confortable d'avoir des lignes de code identiques dans différentes fonctions.

Artyom, pensez-vous que j'obtienne la bonne chose au départ ? Je veux dire qu'à chaque tic-tac, la valeur sera reçue. N'est-ce pas trop cher ? Comme je ne suis pas un programmeur de formation, ces questions me viennent parfois à l'esprit...

 
Tincup:

La réponse n'est pas tout à fait claire pour moi, alors laissez-moi vous la poser à nouveau. Ai-je bien compris que lors de la définition des conditions de trading

Vous devez utiliser la valeur MA pour le nombre correspondant de barres en arrière, mais pas la valeur marquée d'une flèche jaune dans l'image.

J'ai dessiné la figure comme j'ai compris votre réponse.



En fait, la question est un peu fausse. L'important n'est pas le déplacement de la courbe mais la valeur à laquelle la barre que le conseiller expert doit obtenir du tampon. C'est ce qu'il faut comprendre. Et il n'y a AUCUNE correspondance entre le biais et l'obtention de la valeur du tampon.
 

Bonjour

première question


A=vrai

si la valeur de l'Imacd(Main Line) il y a 15 minutes est inférieure à celle d'il y a 30 minutes

 
Claus084:

Bonjour

première question

A=vrai

si la valeur de l'Imacd (Main Line) il y a 15 minutes est inférieure à celle d'il y a 30 minutes

Non, mieux vaut avancer !
 
double iMACD( string symbol, int timeframe, int fast_ema_period, int slow_ema_period, int signal_period, int applied_price, int mode, int shift)
Calcul de l'indicateur Convergence/Divergence des Moyennes Mobiles. Dans les systèmes où l'OMA est appelé histogramme MACD, cet indicateur est dessiné sous forme de deux lignes. Dans le terminal client, la convergence/divergence des moyennes mobiles est dessinée sous forme d'histogramme.
Paramètres :
symbole - Nom du symbole, sur les données duquel l'indicateur sera calculé. NULL signifie le symbole actuel.
cadre temporel - Période. Peut être l'une des périodes du graphique. 0 signifie la période du graphique actuel.
période_ema_rapide - Période de calcul de la moyenne mobile rapide.
période_ema_lente - Période de calcul d'une moyenne mobile lente.
signal_période - Période de calcul de la moyenne pour le calcul de la ligne de signal.
prix appliqué - Prix utilisé. Peut être l'une des constantes de prix.
mode - Indice de la ligne de l'indicateur. Peut être n'importe quelle valeur de l'identifiant de la ligne de l'indicateur.



La question ici est


si je comprends bien.
- Index de la valeur reçue du tampon de l'indicateur (décalage par rapport à la barre actuelle du nombre de périodes en arrière spécifié).


nombre de quelles périodes ?
ou comment puis-je obtenir la valeur du macd de la barre précédente au lieu de la barre actuelle ?

int start ()
{
bool A=trueif
(iMACD(NULL,15,12,26,9,PRICE_CLOSE,MODE_MAIN,1)<iMACD(NULL,15,12,26,9,PRICE_CLOSE,MODE_SIGNAL,2)) { A==true ; } return ; }


 

Cliquez sur lespériodes du graphique et voyez quelles périodes ! Et trouver la barre précédente(shift = 1) à la barre actuelle(shift = 0) au dernier endroit :

double MA0 = iMACD(symbol,timeframe,fast_ema_period,slow_ema_period,signal_period,applied_price,mode,0);//текущий бар
double MA1 = iMACD(symbol,timeframe,fast_ema_period,slow_ema_period,signal_period,applied_price,mode,1);//предыдущий бар


Ou mieux encore, commencez à étudier le manuel de S. Kovalev !
 
Dans le mode de test "prix ouverts", le testeur utilise-t-il uniquement les prix d'ouverture ou les prix d'ouverture, de clôture, haut et bas ?
 
xant:

Rebonjour.

Veuillez m'indiquer comment résoudre le problème suivant.

Il existe un indicateur sous forme compilée. Le code n'est pas disponible. L'indicateur reflète les niveaux de prix dans la fenêtre principale du graphique. Je veux utiliser ces niveaux pour mon EA mais il est impossible d'appeler l'indicateur en utilisant la fonction iCustom() - les niveaux affichés sont des objets graphiques. Est-il possible de lire les données autrement, par exemple à travers les noms d'objets et l'heure ? Les noms de tous les niveaux sont connus (disponibles dans les paramètres de l'indicateur), les objets sont mis à jour une fois par semaine.

Je tiens à préciser d'emblée que je ne suis pas très expérimenté en matière de programmation. Je vous serais très reconnaissant de me fournir une réponse utile.

C'est une bonne idée. Les objets graphiques sont reconnus par leur nom. Les niveaux peuvent être spécifiés par deux types (de base) d'objets graphiques : OBJ_TREND (ligne de tendance) et OBJ_HLINE (ligne horizontale). Si je comprends bien, vous avez besoin de deux propriétés de ces objets (prix et éventuellement temps) :

    //---- Уровень для горизонтальной линии
    double ld_Level = ObjectGet (Name, OBJPROP_PRICE1);
    //---- Уровень для трендовой линии на текущем баре
    ld_Level = ObjectGetValueByShift (Name, Bar);
    datetime ldt_Time = ObjectGet (Name, OBJPROP_TIME1);
Quelque chose comme ça.
 
Sancho77:
Veuillez me conseiller : dans le mode de test par "prix ouverts", le testeur utilise-t-il uniquement les prix ouverts, fermés, hauts et bas ?
.

Oui, seulement les prix ouverts, c'est pourquoi il est important d'en tenir compte lors de l'analyse de l'EA. Par exemple, si la queue de la bougie casse votre canal, l'EA peut ne pas le remarquer, mais vous pouvez l'écrire dans la logique du programme et résoudre le problème.

 

Bonjour, j'ai pris comme base le script du tutoriel de S. Kovalev. Je veux créer un conseiller expert pour ouvrir une transaction, mettre un stop loss, prendre un profit, puis attendre la fin de la transaction (c'est-à-dire le stop loss ou le profit), et seulement ensuite ouvrir à nouveau la transaction. J'ai essayé avec des interruptions de cycle et de cycle. Veuillez me conseiller sur la manière de procéder. J'ai pensé qu'il serait peut-être plus facile de ne pas fixer un stop-loss et un take-profit en même temps, et de faire en sorte que le prix se ferme lorsqu'il s'approche d'un certain niveau. Mais je ne veux pas procéder de cette façon parce que j'ai peur des dérapages, et chaque point est important pour moi. Si j'essaie d'ouvrir un ou plusieurs contrats en même temps, je ne peux pas en ouvrir un nouveau.

//+------------------------------------------------------------------+
int start() //---- fonction start
{
double //---- déclarer les variables
x,
y ;
//+------------------------------------------------------------------+
OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Ask-15*Point,Ask+15*Point) ; //---- ordre de marché pour acheter et mettre un stop et un profit à 15 points du prix d'ouverture
//+------------------------------------------------------------------+
while(x!=Ask-15*Point||y !=Demande+15*Point) //---- de la condition Je veux que la transaction soit fermée jusqu'à ce que la transaction précédente soit fermée, c'est à direе. il est possible de
{//----- ne garder qu'une seule transaction ouverte
continuer ;//---- interrompre la condition et passer à l'étape suivante
}
//+------------------------------------------------------------------+
return;//---- fonction return
}
//+------------------------------------------------------------------+