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

 
Salut les gars ! Où ou comment puis-je cliquer pour connaître le lot maximum que je peux miser ?
 
MaxZ:

Existe-t-il des comptes MT4 où vous pouvez ouvrir un verrou avec une équité négative ? Je vous le demande par pure curiosité. Le différend est né sur un autre forum. On me dit que de tels comptes existent ! DD

Pour qu'il n'y ait pas de questions inutiles, voici un exemple :

Vous avez ouvert une transaction avec un volume N. Votre terminal indique après la ligne "Free :": "-XXX.XX"... Serez-vous capable d'ouvrir une serrure avec le volume N ! Je ne pense pas que ce soit le cas pour un compte ordinaire. Et on m'a dit qu'il y avait des comptes spéciaux ! :)))))) Je n'y crois pas...

La réponse est reçue... Je suis choqué...

Ces "chefs" ne savent plus comment attirer "Pinocchio l'idiot" !

Je ne rencontre Kolya Morzhov que dans le testeur. J'ai mis mes restrictions dans le conseiller du travail pour ne pas aller dans les extrêmes ! ;))

 
Beowulf:
Salut les gars ! Où ou comment puis-je cliquer pour connaître le lot maximum que je peux miser ?

double MaxLot = MarketInfo(Symbol(), MODE_MAXLOT);
//В следущий раз не ленитесь заглянуть в Доку, а то тут могут послать к телепату!
 
borilunad:

Il a déjà posé la question dans un autre fil de discussion. Il a été répondu... Mais il ne comprend pas le code - il l'a écrit lui-même.

Il veut un script (solution toute faite - appuyer sur une touche (exécuter le script) - regarder l'écran).

 

r772ra, wow, je devrais faire plus attention aux fonctions de kim, merci !

 
Roman.:

Il a déjà posé la question dans un autre fil de discussion. Il a été répondu... Mais il ne comprend pas le code - il l'a écrit lui-même.

Il faut un script (solution toute faite - appuyer sur une touche (exécuter le script) - regarder l'écran).



Il ne reste plus qu'une chose à faire, l'inviter à investir nos comptes ! :))

 
borilunad:


Il ne reste plus qu'une chose à faire, l'inviter à investir nos comptes ! :))


C'est une bonne idée, mais difficile à mettre en œuvre
 

 

hoz:

Je suis déjà un peu perdu. Voici 3 fonctions, dont chacune reçoit un signal spécifique pour un indicateur spécifique.

Cette fonction reçoit le signal général de tous les indices et prend la décision d'ACHETER ou de VENDRE.

C'est la fonction principale qui reçoit le signal général ; ici nous obtenons les valeurs des indices à travers la boucle pour passer par toutes les barres, bien sûr. Et ensuite, les valeurs obtenues sont transmises par référence aux fonctions appropriées où ces valeurs sont nécessaires, c'est-à-dire aux fonctions :

int GetCrossingMa(double& i_maFast1, double& i_maFast2, double& i_maSlow1, double& i_maSlow2)

int GetStochSignal(double& stochD1, double& stochD2, double& stochK1, double& stochK2)

void GetMomentumSignal() , en principe, peut également être placé à cet endroit.

Ainsi, tous les calculs des indices seront dans une fonction principale d'obtention du signal. Tout est logique dans ce cas...

TarasBY:

Victor ! Vous avez la logique, mais les connaissances ne sont pas suffisantes. Si vous persévérez, le premier vous aidera à aller plus loin que le manuel, et pour "conquérir" le second, vous devez commencer par lui (le manuel). Vous n'êtes pas (encore) prêt à construire votre propre structure logique de code, revenez à la version alphabétique.
P.S. Ce qui "attire l'attention" dans votre code :

Dans la fonction GetSignal() pour la recherche du croisement de deux lignes, la boucle for PEUT être utilisée, mais il est préférable d'utiliser la boucle while, bien que ce soit une préférence personnelle. Pour commencer, vous devez déplacer une parenthèse comme dans "L'exécution ne peut être pardonnée" pour que votre code exécute ce que vous venez de dire. Pour une raison quelconque, cette fonction (résultat) manque les résultats de deux fonctions : GetStochSignal() et GetMomentumSignal() - ceci est légèrement sans conséquence.

dans les fonctions GetCrossingMa() et GetStochSignal() il n'y a AUCUN intérêt à passer les paramètres par des références, car cela aurait un sens, si ces variables à l'intérieur de la fonction CHANGENT leurs valeurs.

La fonction void GetMomentumSignal() ne renvoie RIEN.

Bien que j'admette que c'est "pire à voir" de l'extérieur... :)))

Voici une variante de la fonction qui reçoit des signaux de MAsh(s) :

//IIIIIIIIIIIIIIIIIII==================CONSTANS=================IIIIIIIIIIIIIIIIIIIIII+
#define       BULL          0
#define       BEAR          1
#define       STOP         -1
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
extern int    Use_ChangeTrend.MA      = 0;           // 0 - off; Брать сигнал на смене тренда: 
//1 - ТОЛЬКО на первом; 2 - ТОЛЬКО не на первом; 3 - на всех
extern double MA_K_Period             = 3.0;         // коэффициент получения периода 2-ой МАшки.
extern int    MA_Period               = 14;
/*extern*/ int    MA_Shift                = 0;
extern int    MA_Method               = 7;
extern int    MA_Price                = 7;
/*extern*/ int    Color_Mode               = 0;
int           bia_PeriodMA[2];
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|  Автор : TarasBY, taras_bulba@tut.by                                              |
//+-----------------------------------------------------------------------------------+
//|        Получаем сигнал по наклону MA или по пересечению 2-х MA                    |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
int fGet_SignalMA (string fs_Symbol,                        // Symbol
                   int fi_TF,                               // Таймфрейм
                   double fd_Deviation = 0,                 // расхождение м/у МАшками
                   bool fb_ControlBeginChangeTrend = False, // Контроль начала смены тренда
                   int fi_BarSignal = 1,                    // Бар на котором считываем сигнал
                   int fi_VerificationBars = 1)             // Количество баров для подтверждения сигнала
{
    static int li_preSignal = STOP;
    double lda_MA[2];
    bool   lb_twice = (MA_K_Period > 1.0), lb_Condition;
    int    li_BAR = fi_BarSignal, li_Trend = STOP, li_VerificationBars = 0, li_cmd = 1;
//----
    //---- Если работаем с 2-мя МАшками
    if (lb_twice)
    {
        for (int li_IND = 0; li_IND < 2; li_IND++)
        {lda_MA[li_IND] = iCustom (fs_Symbol, fi_TF, "AllAverages_v2.51", fi_TF, bia_PeriodMA[li_IND], MA_Shift, MA_Method, MA_Price, Color_Mode, 0, li_BAR);}
        //---- На 1-ом проверяемом баре фиксируем расхождение МАшек
        double ld_Deviation = fControl_Deviation (lda_MA, lb_Condition, li_cmd, li_Trend, fd_Deviation);
    }
    //---- Если работаем с 1-ой МАшкой
    else
    {
        for (li_IND = 0; li_IND < 2; li_IND++)
        {lda_MA[li_IND] = iCustom (fs_Symbol, fi_TF, "AllAverages_v2.51", fi_TF, MA_Period, MA_Shift, MA_Method, MA_Price, Color_Mode, 0, li_BAR + li_IND);}
        double ld_Price = fGet_PriceOnBar (PRICE_TYPICAL, fs_Symbol, fi_TF, li_BAR);
        //---- На 1-ом проверяемом баре фиксируем расхождение МАшек
        ld_Deviation = fControl_Deviation (lda_MA, lb_Condition, li_cmd, li_Trend, fd_Deviation);
        if (NDD (li_cmd * (lda_MA[0] - ld_Price)) >= 0.0) return (STOP);
    }
    //---- Если фиксируем на баре пересечение или горизонтальное расположение МА - выходим
    if (ld_Deviation == 0.0) return (STOP);
    int li_cnt = 0;
    while (lb_Condition == true)
    {
        li_BAR++;
        //---- Собираем показания МАшек в массив
        if (lb_twice)
        {
            for (li_IND = 0; li_IND < 2; li_IND++)
            {lda_MA[li_IND] = iCustom (fs_Symbol, fi_TF, "AllAverages_v2.51", fi_TF, bia_PeriodMA[li_IND], MA_Shift, MA_Method, MA_Price, Color_Mode, 0, li_BAR);}
            bool lb_AddCondition = true;
            li_cnt++;
        }
        else
        {
            for (li_IND = 0; li_IND < 2; li_IND++)
            {lda_MA[li_IND] = iCustom (fs_Symbol, fi_TF, "AllAverages_v2.51", fi_TF, MA_Period, MA_Shift, MA_Method, MA_Price, Color_Mode, 0, li_BAR + li_IND);}
            ld_Price = fGet_PriceOnBar (PRICE_TYPICAL, fs_Symbol, fi_TF, li_BAR);
            lb_AddCondition = (NDD (li_cmd * (lda_MA[0] - ld_Price)) < 0.0);
        }
        //---- Фиксируем расхождение МАшек или наклон 1-ой МА
        ld_Deviation = NDD (lda_MA[0] - lda_MA[1]);
        //---- Определяем условия контроля пересечения МАшек или изменение наклона
        if (li_Trend == BULL) lb_Condition = (ld_Deviation >= 0.0); else lb_Condition = (ld_Deviation <= 0.0);
        //---- Производим подсчёт баров, на которых выполняется означенное расхождение
        if (lb_AddCondition)
        {
            if (fd_Deviation != 0.0) {if (MathAbs (ld_Deviation) >= fd_Deviation) li_VerificationBars++;}
            else li_VerificationBars++;
        }
        else li_cnt++;
        //---- Если не отслеживаем начало смены тренда
        if (!fb_ControlBeginChangeTrend) {if (li_VerificationBars == fi_VerificationBars) return (li_Trend);}
        else
        {
            //---- Если баров, на которых выполняются заданные нами условия, > fi_VerificationBars - выходим
            if (li_VerificationBars > fi_VerificationBars) {li_preSignal = STOP; return (STOP);}
            else if (!lb_Condition)
            {
                if (li_VerificationBars == fi_VerificationBars) {return (li_Trend);}
                //---- Если не набрали нужное количество подтверждений сиганала после пересечения
                // или смены наклона - выходим
                else if (li_VerificationBars < fi_VerificationBars) return (STOP);
            }
        }
        //---- Предусматриваем уход от зацикливания (на начале отсчёта)
        if (li_cnt > MA_Period) return (STOP);
    }
//----
    return (STOP);
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|  Автор : TarasBY, taras_bulba@tut.by                                              |
//+-----------------------------------------------------------------------------------+
//|        Контролируем расхождение 2-ух МАшек или наклон 1-ой МАшки                  |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
double fControl_Deviation (double ar_MA[],           // массив входящих значений
                           bool& fb_Condition,       // состояние тренда
                           int& fi_cmd,              // "знак тренда"
                           int& fi_Trend,            // тренд
                           double fd_Deviation = 0)  // расхождение м\у МАшками
{
    double ld_Deviation = NDD (ar_MA[0] - ar_MA[1]);
//----
    //---- Если фиксируем на баре пересечение или горизонтальное расположение МА - выходим
    if (ld_Deviation == 0.0) return (0.0);
    //---- Проверяем расхождение на нужную величину (если задано)
    if (fd_Deviation != 0.0) {if (MathAbs (ld_Deviation) < fd_Deviation) return (0.0);}
    if (ld_Deviation > 0.0) {fb_Condition = (ld_Deviation >= 0.0); fi_Trend = BULL;}
    else {fb_Condition = (ld_Deviation <= 0.0); fi_Trend = BEAR; fi_cmd = -1;}
//----
    return (ld_Deviation);
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+

Comme on peut le comprendre à partir des commentaires, le signal peut être obtenu à la suite d'une inclinaison d'un МА (à MA_K_Period <= 1,0) ou à la suite d'une intersection de 2 МА (à MA_K_Period > 1,0). La période de la 2ème MA est calculée par elle-même (en dehors de cette fonction) :

    bia_PeriodMA[0] = MA_Period;
    bia_PeriodMA[1] = MA_Period * MA_K_Period;

Vous pouvez également spécifier dans la fonction la condition de divergence de 2 MAs (lorsque fd_Deviation > 0.0). Vous pouvez également suivre le fait de l'intersection (fb_ControlBeginChangeTrend = TRUE) ou simplement fixer la constatation de Fast et Slow l'un par rapport à l'autre.

Pour voir comment ce code fonctionne, j'ai placé un indicateur dans l'archive qui dessine des flèches par les signaux de cette fonction. Nous le lançons en utilisant Signal_MA.tpl (pour une MA) ou Signal_MA2.tpl (pour 2 MA). A propos, les MAs peuvent être de différents types.

Dossiers :
signal_ma.zip  185 kb
 
TarasBY:

Voici une variante de la fonction, qui reçoit les signaux des MA :

Comme nous pouvons le voir dans les commentaires, le signal peut être obtenu sur la base de l'inclinaison d'une MA (à MA_K_Period <= 1.0) ou sur la base de l'intersection de 2 MA (à MA_K_Period > 1.0). La période de la 2ème MA est calculée par elle-même (en dehors de cette fonction) :

Vous pouvez également spécifier dans la fonction la condition de divergence de 2 MAs (lorsque fd_Deviation > 0.0). Vous pouvez également suivre le fait de l'intersection (fb_ControlBeginChangeTrend = TRUE) ou simplement fixer la constatation de Fast et Slow l'un par rapport à l'autre.

Pour voir comment ce code fonctionne, j'ai placé un indicateur dans l'archive qui dessine des flèches par des signaux de cette fonction. Au fait, il peut y avoir différentes MAs.


Si vous souhaitez accélérer le travail de l'indicateur, veuillez vous adresser à
 
Vinin:

Si vous souhaitez accélérer un indicateur, veuillez vous adresser à
Si c'est un indicateur, lequel ? - Celui qui compte les Mashki ? Quoi qu'il en soit, ce sera intéressant !