[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 4. - pagina 506

 
Ciao gente! Dove o come posso cliccare per scoprire il lotto massimo che posso scommettere?
 
MaxZ:

Ci sono conti MT4 in cui è possibile aprire un blocco con capitale negativo? Lo chiedo solo per interesse. La controversia è sorta su un altro forum. Mi è stato detto che tali conti esistono! :DD

Affinché non ci siano domande inutili, ecco un esempio:

Avete aperto un trade con volume N. Il tuo terminale dice dopo la linea "Free:": "-XXX.XX"... Sarai in grado di aprire una serratura con il volume N! Non credo in un conto normale. E mi è stato detto che ci sono dei conti speciali! :)))))) Non ci credo...

Larisposta viene ricevuta... Sono scioccato...

Questi "cuochi" non sanno più come attirare "lo sciocco Pinocchio"!

Ho incontrato Kolya Morzhov solo nel tester. Ho messo le mie restrizioni nel Consigliere del Lavoratore per non andare agli estremi! ;))

 
Beowulf:
Ciao gente! Dove o come posso cliccare per scoprire il lotto massimo che posso scommettere?

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

Lo ha già chiesto in un altro thread. È stato risposto... Ma non capisce il codice - lo ha scritto lui stesso.

Vuole uno script (soluzione pronta - premere un tasto (eseguire lo script) - guardare lo schermo).

 

r772ra, wow, dovrei prestare più attenzione alle funzioni di kim, grazie!

 
Roman.:

Lo ha già chiesto in un altro thread. È stato risposto... Ma lui non capisce il codice - lo ha scritto lui stesso.

Ha bisogno di uno script (soluzione pronta - premere un tasto (eseguire lo script) - guardare lo schermo).



Resta solo una cosa, invitarlo a investire i nostri conti! :))

 
borilunad:


Resta solo una cosa da fare, invitarlo a investire i nostri conti! :))


È una buona idea, ma difficile da implementare
 

 

hoz:

Sono già un po' confuso. Ecco 3 funzioni, ognuna delle quali riceve un segnale specifico per un indicatore specifico.

Questa funzione riceve il segnale generale da tutti gli indici e prende la decisione di COMPRARE o VENDERE.

Questa è la funzione principale che riceve il segnale generale; qui otteniamo i valori degli indici attraverso il ciclo per passare attraverso tutte le barre, naturalmente. E poi i valori ottenuti vengono passati per riferimento alle funzioni appropriate dove questi valori sono necessari, cioè alle funzioni:

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() , in linea di principio, può anche essere messo lì.

Così, tutti i calcoli degli indici saranno in una funzione principale di ottenere il segnale. Tutto è logico in questo caso...

TarasBY:

Victor! Avete la logica, ma la conoscenza non è abbastanza. Se continui a farlo, il primo ti aiuterà ad andare oltre il libro di testo, e per "conquistare" il secondo, devi iniziare con esso (il libro di testo). Non sei pronto (ancora) a costruire la tua struttura logica del codice, torna alla versione alfabetica.
P.S. Cosa "cattura l'occhio" nel tuo codice:

Nella funzione GetSignal() per la ricerca dell'incrocio di due linee si può usare il ciclo for, ma è meglio usare il ciclo while, anche se questa è una preferenza personale. Per cominciare, dovete spostare una parentesi come in "Execution cannot be pardoned" per far eseguire al vostro codice ciò che avete appena detto. Per qualche ragione, questa funzione (risultato) manca dei risultati di due funzioni: GetStochSignal() e GetMomentumSignal() - questo è leggermente irrilevante.

nelle funzioni GetCrossingMa() e GetStochSignal() non ha senso passare parametri per riferimenti, perché avrebbe senso, se queste variabili all'interno della funzione CAMBIANO i loro valori.

La funzione void GetMomentumSignal() non restituisce nulla.

Anche se ammetto che è "peggio da vedere" dall'esterno... :)))

Ecco una variante alternativa della funzione che riceve segnali da 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+

Come si può capire dai commenti, il segnale può essere ottenuto come risultato dell'inclinazione di un МА (a MA_K_Period <= 1.0) o come risultato dell'intersezione di 2 МА (a MA_K_Period > 1.0). Il periodo della 2a MA è calcolato da solo (al di fuori di questa funzione):

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

Puoi anche specificare nella funzione la condizione per la divergenza di 2 MA (quando fd_Deviation > 0.0). Potete anche tracciare il fatto dell'intersezione (fb_ControlBeginChangeTrend = TRUE) o semplicemente fissare il ritrovamento di Fast e Slow uno rispetto all'altro.

Per vedere come funziona questo codice, ho messo in archivio un indicatore che disegna frecce dai segnali di questa funzione. Lo lanciamo usando Signal_MA.tpl (per un MA) o Signal_MA2.tpl (per 2 MA). A proposito, le AM possono essere di diversi tipi.

File:
signal_ma.zip  185 kb
 
TarasBY:

Ecco una variante alternativa della funzione, che riceve segnali dalle AM:

Come possiamo vedere dai commenti, il segnale può essere ottenuto in base all'inclinazione di un MA (a MA_K_Period <= 1.0) o in base all'intersezione di 2 MA (a MA_K_Period > 1.0). Il periodo della 2a MA è calcolato da solo (al di fuori di questa funzione):

Puoi anche specificare nella funzione la condizione per la divergenza di 2 MA (quando fd_Deviation > 0.0). Potete anche tracciare il fatto dell'intersezione (fb_ControlBeginChangeTrend = TRUE) o semplicemente fissare il ritrovamento di Fast e Slow uno rispetto all'altro.

Per vedere come funziona questo codice, ho messo in archivio un indicatore che disegna frecce per segnali di questa funzione. A proposito, ci possono essere diverse MAs.


Se volete accelerare il lavoro dell'indicatore, contattate
 
Vinin:

Se volete accelerare un indicatore, contattate
Se un indicatore, quale? - Quello che conta Mashki? In ogni caso - sarebbe interessante!
Motivazione: