001 писал(а)>> Si se pudiera hacer en código, me he devanado los sesos :)
int Order_Count[6];//===============================================================================// Функция возвращаюшая количество ордеров определенного типа исхода из заданных ограничений//===============================================================================int Order_Count_Calculate(string _Symbol,int _Magic,int _OP=-1){ArrayInitialize( Order_Count,0);for(int i =OrdersTotal()-1; i >=0; i--){if(!OrderSelect( i, SELECT_BY_POS, MODE_TRADES))continue;if(OrderSymbol()!= _Symbol)continue;if(OrderMagicNumber()!= _Magic)continue;
Order_Count[OrderType()]++;}if(_OP>=0)return( Order_Count[_OP]);return(0);}
//+------------------------------------------------------------------+ //| Función de inicialización de indicadores personalizada | //+------------------------------------------------------------------+ int init() { //---- Se utilizan 2 buffers adicionales para el conteo. IndicatorBuffers(3); //---- ajustes de dibujo SetIndexStyle(0,DRAW_HISTOGRAM); SetIndexDrawBegin(0,SignalSMA); IndicadorDígitos(Dígitos+2); //---- 3 indicadores de la asignación de buffers SetIndexBuffer(0,OsmaBuffer); SetIndexBuffer(1,MacdBuffer); SetIndexBuffer(2,SignalBuffer); //---- nombre para la etiqueta de la subventana DataWindow y del indicador IndicatorShortName("OsMA("+FastEMA+", "+SlowEMA+", "+SignalSMA+")"; //---- inicialización realizada return(0); } //+------------------------------------------------------------------+ //| Media móvil del oscilador | //+------------------------------------------------------------------+ int inicio() { int límite; int barras_contadas=IndicadorContado(); //---- la última barra contada se volverá a contar if(counted_bars>0) counted_bars--; limit=Barras_contabilizadas; //---- macd contada en el 1er búfer adicional for(int i=0; i<limit; i++) MacdBuffer[i]=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i); //---- línea de señalización contada en el 2º búfer adicional for(i=0; i<limit; i++) SignalBuffer[i]=iMAOnArray(MacdBuffer,Bars,SignalSMA,0,MODE_SMA,i); //---- bucle principal for(i=0; i<limit; i++) OsmaBuffer[i]=MacdBuffer[i]-SignalBuffer[i]; //---- hecho
¡Muchas gracias! Aunque no he tratado con funciones, ahora tengo que averiguar cómo llamarla, pasarle los valores de las variables y obtener los valores de vuelta. Si entiendo bien el mecanismo.
Para iniciar sesión y usar el sitio web MQL5.com es necesario permitir el uso de Сookies.
Por favor, active este ajuste en su navegador, de lo contrario, no podrá iniciar sesión.
Ha iniciado sesión. La autenticación de dos factores se ha desactivado. Vuelva a configurarla y escanee un nuevo código QR, o continúe con la autenticación de dos factores desactivada.
Si se pudiera hacer en código, me he devanado los sesos :)
¿Cuál puede ser el problema? El indicador mostró varios trozos durante la prueba y el EA entró en bucle ¿cuál podría ser el problema con el indicador?
¿En qué variable se almacena el valor de OsMA?
//+------------------------------------------------------------------+
//| OsMA.mq4 ||
//| Copyright © 2004, MetaQuotes Software Corp.
//| http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2004, MetaQuotes Software Corp.
#enlace de propiedad "http://www.metaquotes.net/"
//---- ajustes del indicador
#property indicador_separar_ventana
#property indicator_buffers 1
#property indicator_color1 Silver
#property indicator_width1 2
//---- parámetros del indicador
extern int FastEMA=12;
extern inttern SlowEMA=26;
extern inttern SeñalSMA=9;
//---- búferes indicadores
doble OsmaBuffer[];
doble MacdBuffer[];
doble SignalBuffer[];
//+------------------------------------------------------------------+
//| Función de inicialización de indicadores personalizada |
//+------------------------------------------------------------------+
int init()
{
//---- Se utilizan 2 buffers adicionales para el conteo.
IndicatorBuffers(3);
//---- ajustes de dibujo
SetIndexStyle(0,DRAW_HISTOGRAM);
SetIndexDrawBegin(0,SignalSMA);
IndicadorDígitos(Dígitos+2);
//---- 3 indicadores de la asignación de buffers
SetIndexBuffer(0,OsmaBuffer);
SetIndexBuffer(1,MacdBuffer);
SetIndexBuffer(2,SignalBuffer);
//---- nombre para la etiqueta de la subventana DataWindow y del indicador
IndicatorShortName("OsMA("+FastEMA+", "+SlowEMA+", "+SignalSMA+")";
//---- inicialización realizada
return(0);
}
//+------------------------------------------------------------------+
//| Media móvil del oscilador |
//+------------------------------------------------------------------+
int inicio()
{
int límite;
int barras_contadas=IndicadorContado();
//---- la última barra contada se volverá a contar
if(counted_bars>0) counted_bars--;
limit=Barras_contabilizadas;
//---- macd contada en el 1er búfer adicional
for(int i=0; i<limit; i++)
MacdBuffer[i]=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);
//---- línea de señalización contada en el 2º búfer adicional
for(i=0; i<limit; i++)
SignalBuffer[i]=iMAOnArray(MacdBuffer,Bars,SignalSMA,0,MODE_SMA,i);
//---- bucle principal
for(i=0; i<limit; i++)
OsmaBuffer[i]=MacdBuffer[i]-SignalBuffer[i];
//---- hecho
return(0);
}
//+------------------------------------------------------------------+
Esta variante hará
¡Muchas gracias! Aunque no he tratado con funciones, ahora tengo que averiguar cómo llamarla, pasarle los valores de las variables y obtener los valores de vuelta. Si entiendo bien el mecanismo.
¿En qué variable se almacena el valor de OsMA?
¿No está en el buffer?
>> ¿pero no está en el buffer?
>> ¿Qué buffer?
¿Cuál?
OsmaBuffer[]
>> ¿Cuál?
дабавте перед
Alert("Значения MacdBuffer[i]="MacdBuffer[i]);
Alert("Значения SignalBuffer[i]="SignalBuffer[i]);
Alert("Значения OSMA ="OsmaBuffer[i]);
return(0);
}
sólo hay que normalizar los valores
Hola.
¿Por qué no se transfiere el stop para las posiciones de compra? para las posiciones de venta todo funciona.
if(OrdersTotal()>0)
{
if(Bid==buy||Bid==busell)
{
OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES);
OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(), 0, Blue);
}
return(0);
}
¿Cuál puede ser el problema? El indicador mostró varias piezas durante la prueba, y el EA bucle en lo que podría ser el problema del indicador?
Parámetros mal configurados (por número o tipo) en el EA.
Alternativamente, elimine todos los parámetros de cadena del indicador.