Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 1210

 
MQL_User:

No pensé que me encontraría con un problema así, porque a primera vista debería ser una cuestión de rutina redibujar el gráfico desde el programa. En este sentido, el propósito de la función ChartRedraw() no está claro...

No es para los indicadores, sino para mostrar los cambios realizados en las propiedades de los objetos gráficos.

Es necesario enviar un tick al indicador - entonces el indicador se redibujará. Bueno, es decir, hará lo que debe hacer en la nueva garrapata.

Y para enviar un nuevo tick, hay que esperar, lo que no es una opción, o refrescar el gráfico mediante PCM --> Refresh, lo que tampoco es una opción, o utilizar la función ChartSetSymbolPeriod() con dichos parámetros para el gráfico actual:

ChartSetSymbolPeriod(0,NULL,PERIOD_CURRENT);
Документация по MQL5: Операции с графиками / ChartSetSymbolPeriod
Документация по MQL5: Операции с графиками / ChartSetSymbolPeriod
  • www.mql5.com
Меняет значения символа и периода указанного графика. Функция работает асинхронно, то есть отдает команду и не ждет окончания ее выполнения. Отданная команда поступает в очередь сообщений графика и выполняется только после обработки всех предыдущих команд. Возвращает true в случае удачного помещения команды в очередь графика, иначе false. Чтобы...
 


Hola, ayúdenme, escribí un script que abre una orden limitada pero a precio de mercado. Todo funciona, decidí cambiarlo para poner un límite por debajo/por encima del mercado, nada funciona, aunque el código de retorno del servidor de comercio 10009, y GetLastError() devuelve 0. Código

void OnStart()
 {MqlTradeRequest request={0};
  MqlTradeResult  result={0};
 double Bid=SymbolInfoDouble(Symbol(),SYMBOL_BID);
 double Ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
 int digits=SymbolInfoInteger(_Symbol,SYMBOL_DIGITS);  
 double p=NormalizeDouble(ChartPriceOnDropped(),digits); 
 if( SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE)==10)
 {p=NormalizeDouble(ChartPriceOnDropped()*0.1,digits)/0.1;
 } 
 int V=75;
           if (p<Ask)
            {
             request.action   =TRADE_ACTION_PENDING;                     // тип торговой операции
             request.symbol   =Symbol();                              // символ
             request.volume   =MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)/V/((Ask-p)/
             SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE)*SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)));  
             if (request.volume>AccountInfoDouble(ACCOUNT_BALANCE)/SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL)) 
             { request.volume=MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)/SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL));
             }                             
             request.type     =ORDER_TYPE_BUY_LIMIT;                        // тип ордера
             request.price    =Ask;                                    // цена для открытия
             request.deviation=50;                                     // допустимое отклонение от цены
             request.sl      =p;                                      // Stop Loss позиции
             request.tp      =NormalizeDouble(Ask+(Ask-p)*3,digits);    // Take Profit позиции
             request.type_filling=ORDER_FILLING_IOC;
             request.type_time=ORDER_TIME_DAY;
             request.stoplimit=Ask;
             OrderSend(request,result);
            }
si request.price por ejemplo pone: Ask-Point()*30 no lo pone, la normalización del precio tampoco da nada
 
Artem, que puedes decir, a la pregunta anterior, interesante opinión. como experiencia de aprendizaje.
 
Artyom Trishkin:

Esto no es para los indicadores, sino para mostrar los cambios realizados en las propiedades de los objetos gráficos.

Es necesario enviar un tick al indicador - entonces el indicador se redibujará. Es decir, hará lo que debe hacer en la nueva garrapata.

Para enviar un nuevo tick hay que esperar, lo cual no es una opción, o refrescar el gráfico usando PKM --> Refresh, lo cual tampoco es una opción, o usar ChartSetSymbolPeriod() con estos parámetros para el gráfico actual:

Artem, gracias.

Todo está funcionando. :)

 
¿Alguien sabe cómo desactivar la visualización de todos los indicadores utilizados en el EA en el gráfico durante la prueba visual?
 
Сергей Таболин:
¿Alguien sabe cómo desactivar la visualización de todos los indicadores utilizados en el EA en el gráfico durante la prueba visual?

TesterHideIndicators(true);

 

¿Cómo puedo saber si el indicador no está preparado para trabajar con otro marco temporal?

El historial no se está pagando (no se construye) para los plazos adyacentes. El indicador funciona en M15, pero necesito mirar en H1 (en la parte superior del gráfico M15), cuando lo cambio - el gráfico está vacío. Cuando refresco en un par de segundos - la belleza, todos los búferes se renderizan.

¿Cómo puedo hacer que el indicador compruebe el historial en otro marco temporal y mantenga el cálculo hasta que aparezca?

 
Igor Zakharov:

TesterHideIndicators(true);

Muchas gracias ))))

 

No puedo obtener los valores de ATP de otro marco temporal:

ATR_handle=iATR(_Symbol,ATR_TF,ATR_Period);
CopyBuffer(ATR_handle,0,time[i],1,ATR);

desde el marco temporal actual - funciona. desde marcos temporales anteriores - siempre 0

 

En los futuros, ¿cómo se crea un contrato continuo? para el análisis de gráficos técnicos?