[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. No puedo ir a ningún sitio sin ti - 4. - página 506

 
MaxZ:

¿Existe alguna cuenta MT4 en la que se pueda abrir un candado con patrimonio negativo? Lo pregunto por puro interés. La disputa surgió en otro foro. Me han dicho que esas cuentas existen. :DD

Para que no haya preguntas innecesarias, he aquí un ejemplo:

Has abierto una operación con volumen N. Su terminal dice después de la línea "Free:": "-XXX.XX"... ¿Podrás abrir una cerradura con el volumen N? No creo que en una cuenta normal. ¡Y me han dicho que hay algunas cuentas especiales! :)))))) No lo creo...

La respuesta se recibe... Estoy sorprendido...

¡Estos "chefs" ya no saben cómo atraer al "tonto Pinocho"!

Sólo conozco a Kolya Morzhov en el probador. ¡Puse mis restricciones en el Consejero de Trabajo para no ir a los extremos! ;))

 
Beowulf:
¡Hola amigos! ¿Dónde o cómo hago clic para saber el lote máximo que puedo apostar?

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

Ya preguntó en otro hilo sobre ello. Se respondió... Pero no entiende el código, sino que lo ha escrito él mismo.

Quiere un script (solución preparada - pulsar una tecla (ejecutar el script) - mirar la pantalla).

 

r772ra, vaya, debería prestar más atención a las funciones de kim, ¡gracias!

 
Roman.:

Ya preguntó en otro hilo sobre ello. Se respondió... Pero él no entiende de código - él mismo escribió sobre él.

Necesita un script (solución lista - pulsar una tecla (ejecutar el script) - mirar la pantalla).



Sólo queda una cosa, ¡invitarle a invertir nuestras cuentas! :))

 
borilunad:


Sólo queda una cosa por hacer, ¡invitarle a invertir nuestras cuentas! :))


Es una buena idea, pero difícil de aplicar
 

 

hoz:

Ya me estoy confundiendo un poco. Aquí hay 3 funciones, cada una de las cuales recibe una señal específica para un indicador concreto.

Esta función recibe la señal general de todos los índices y toma la decisión de COMPRAR o VENDER.

Esta es la función principal que recibe la señal general; aquí obtenemos los valores de los índices a través del bucle para recorrer todas las barras, por supuesto... Y luego los valores obtenidos se pasan por referencia a las funciones apropiadas donde se necesitan estos valores, es decir, a las funciones:

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 principio, también se puede poner ahí.

Así, todos los cálculos de los índices estarán en una función principal de obtención de la señal. Todo es lógico en este caso...

TarasBY:

¡Victor! Tienes la lógica, pero el conocimiento no es suficiente. Si sigues con ello, el primero te ayudará a llegar más lejos que el libro de texto, y para "conquistar" el segundo, tienes que empezar por él (el libro de texto). No está preparado (todavía) para construir su propia estructura lógica de código, vuelva a la versión alfabética.
P.D. Lo que "llama la atención" en su código:

En la función GetSignal() para la búsqueda del cruce de dos líneas se puede utilizar el bucle for, pero es mejor utilizar el bucle while, aunque esto es una preferencia personal. Para empezar, necesitas mover un paréntesis como en "La ejecución no puede ser perdonada" para que tu código ejecute lo que acabas de decir. Por alguna razón, esta función (resultado) carece de resultados de dos funciones: GetStochSignal() y GetMomentumSignal() - esto es ligeramente intrascendente.

en las funciones GetCrossingMa() y GetStochSignal() NO tiene sentido pasar parámetros por referencias, porque tendría sentido, si estas variables dentro de la función CAMBIAN sus valores.

La función void GetMomentumSignal() no devuelve nada.

Aunque admito que es "peor de ver" desde fuera... :)))

Aquí hay una variante alternativa de la función que obtiene señales 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+

Como se desprende de los comentarios, la señal puede obtenerse como resultado de la inclinación de un МА (en MA_K_Period <= 1,0) o como resultado de la intersección de 2 МА (en MA_K_Period > 1,0). El periodo de la 2ª MA se calcula por sí mismo (fuera de esta función):

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

También puede especificar en la función la condición de divergencia de 2 MAs (cuando fd_Deviation > 0.0). También puede rastrear el hecho de la intersección (fb_ControlBeginChangeTrend = TRUE) o simplemente fijar el hallazgo de Rápido y Lento en relación con el otro.

Para ver cómo funciona este código, he colocado un indicador en el archivo que dibuja flechas por las señales de esta función. Lo lanzamos usando Signal_MA.tpl (para una MA) o Signal_MA2.tpl (para 2 MAs). Por cierto, las MA pueden ser de diferentes tipos.

Archivos adjuntos:
signal_ma.zip  185 kb
 
TarasBY:

He aquí una variante alternativa de la función, que recibe señales de las MA:

Como podemos ver en los comentarios, la señal se puede obtener en base a la inclinación de un МА (en MA_K_Period <= 1,0) o en base a la intersección de 2 MA (en MA_K_Period > 1,0). El periodo de la 2ª MA se calcula por sí mismo (fuera de esta función):

También puede especificar en la función la condición de divergencia de 2 MAs (cuando fd_Deviation > 0.0). También puede rastrear el hecho de la intersección (fb_ControlBeginChangeTrend = TRUE) o simplemente fijar el hallazgo de Rápido y Lento en relación con el otro.

Para ver cómo funciona este código, he colocado un indicador en el archivo que dibuja flechas por señales de esta función. Por cierto, puede haber diferentes MAs por cierto.


Si desea acelerar el trabajo del indicador, póngase en contacto con
 
Vinin:

Si desea acelerar un indicador, póngase en contacto con
Si es un indicador, ¿cuál? - ¿El que cuenta Mashki? En cualquier caso, sería interesante.
 

¡Buenas tardes! Error de modificación de la orden 4051. He estado pensando durante una hora. ¡¡Parece ser el parámetro correcto allí!! Brevemente, nota por nota. El parámetro precio es el precio de apertura de la orden, OrderOpenPrice(), es estándar.

Nuestro precio de parada está 10 puntos por debajo del precio de apertura, y hemos memorizado el precio. Lo almacenamos en la variable tsena al abrir el pedido.

Tenemos dos pedidos, uno con beneficio y otro sin él. Parece que está claro. ¿Cuál es el error? ¿Qué otra cosa podría ser?

Sí, la condición parece estar clara, aunque no es realmente relevante. Es decir, el precio se ha movido 30 puntos, la condición funcionó (tsena+30*Punto).

Hemos establecido perenos=true una vez; estas condiciones parecen funcionar realmente.

Yo mismo no sé cómo pensar.

En realidad lo usamos una vez perenos=true; Estas condiciones no funcionaron, porque tampoco funcionó.


bool napravlenieCCI=false;
 if( CCI_50S<100&&CCI_50>100 ||CCI_50S<0&&CCI_50>0|| CCI_50S<-100&&CCI_50>-100  )napravlenieCCI=true;// if( CCI_50S>CCI_50&& )napravlenieCCI=false;
 
 bool wishseLMA=false;//Свеча закрывается или находится выше LMA
 if (Bid>LMA_100) wishseLMA=true;Print ("до условияsrabotka    " ,srabotka );Alert("до условияsrabotka    " ,srabotka );
 
 if (EMA_20S>EMA_10S&&EMA_20<EMA_10&&napravlenieCCI&&wishseLMA&&!srabotka) {/// нашли пирисечение сверху вниз и направление CCI вверх
 RefreshRates();
           int tacket=OrderSend (Symbol( ), OP_BUY, lot,NormalizeDouble(Ask, Digits), 5, NormalizeDouble( Ask- (35*Point),Digits), 
           NormalizeDouble( Ask+( 45*Point),Digits), NULL, 450, 0, CLR_NONE);
           int Error=GetLastError();if (Error==0){  
           Sleep(2000); RefreshRates(); double profit = NormalizeDouble( Ask+( 45*Point),Digits); tsena=Ask; perenos = false;
           int tucket=OrderSend (Symbol( ), OP_BUY, lot,NormalizeDouble(Ask, Digits), 5, NormalizeDouble( Ask- (35*Point),Digits),
           0, NULL, 450, 0, CLR_NONE); 
           if (Error==0)   
           srabotka= true; }}
           
           if (Error!=0){ string errorcomment = "Ошибка открытия  ордера OP_BUY"  + " " + Symbol() +  " " + ErrorDescript(Error); 
            Print (errorcomment);}
 
 
 if(tsena+30*Point<Ask&&!perenos){ 
 OrderModify(  tacket, OrderOpenPrice(), tsena-10*Point, OrderTakeProfit(), 0, CLR_NONE);
 Error=GetLastError();if (Error==0){  
 OrderModify(  tucket, OrderOpenPrice(), tsena-10*Point, OrderTakeProfit(), 0, CLR_NONE);
 Error=GetLastError();if (Error==0){  
 perenos=true;}}} 
 
 if (Error!=0){  errorcomment = "Ошибка модификайции ордера OP_BUY"  + " " + Symbol() +  " " + ErrorDescript(Error); 
            Print (errorcomment);BreakPoint();}