[¡Archivo!] Escribiré un asesor GRATIS - página 13

 

¡Hola!

¿Puede alguien saber cómo prescribir correctamente lo siguiente en el código:

Hay un indicador MACD Histogramm WIS. El histograma se calcula en su código y barras de colores, dependiendo de la dirección de la línea y el filtro macd en diferentes colores.

int start()
{
int limit,i;
int counted_bars = IndicatorCounted();

if(counted_bars > 0) counted_bars--;
limit = iBars(NULL,0) - counted_bars;

BufferResize(Filter);
BufferResize(Histogram);

for(i = 0; i <= limit; i++)
MACD[i] = iMA(NULL, 0, FastMA, 0, MAMethod, MAAppliedPrice, i) - iMA(NULL, 0, SlowMA, 0, MAMethod, MAAppliedPrice, i);
for(i = 0; i <= límite; i++)
Señal[i] = iMAOnArray(MACD, iBars(NULL,0), SeñalMA, 0, MAMethod, i);
for(i = 0; i <= límite; i++)
Histograma[i] = MACD[i] - Señal[i];
CalcFilter(Line, limit);
for(i = limit; i >= 0; i--)
{
if(Histogram[i] > Histogram[i+1] && Filter[i] > Filter[i+1])
{
HistogramWaitClose[i] = 0.0;
HistogramaVenta[i] = 0,0;
HistogramaCompra[i] = Histograma[i];
}
if(Histogram[i] < Histogram[i+1] && Filter[i] < Filter[i+1])
{
HistogramWaitClose[i] = 0.0;
HistogramSell[i] = Histogram[i];
HistogramBuy[i] = 0.0;
}
if((Histograma[i] >= Histograma[i+1] && Filtro[i] <= Filtro[i+1]) || (Histograma[i] <= Histograma[i+1] && Filtro[i] >= Filtro[i+1])
{
HistogramWaitClose[i] = Histogram[i];
HistogramSell[i] = 0.0;
HistogramBuy[i] = 0.0;
}
}

return(0);
}

Estoy tratando de prescribir en el Asesor Experto, una de las condiciones, la apertura de posiciones al alza si:

if(Histogram[i] > Histogram[i+1] && Filter[i] > Filter[i+1])
{
HistogramWaitClose[i] = 0.0;
HistogramSell[i] = 0.0;
HistogramBuy[i] = Histogram[i];

pero necesito comparar sólo 2 barras cerradas, es decir, la primera y la segunda (cero no se tocan), no todos (i-barras), es decir, necesidad de comparar la primera y la segunda barra, y si el gráfico de barras de la primera barra mayor que la segunda y las condiciones de filtro y otras condiciones se cumplen, a continuación, comprar, para vender el contrario .... cómo prescribir correctamente, por favor, aconsejar, té-aprendido aficionado)

Gracias

 
kvg31:

Escribiré un asesor de cualquier complejidad. Lo principal es tener una buena idea. Cómo lo va a utilizar no me importa: lo venderá - no me importa (no le pediré dinero).

P. S. Si necesitas un indicador, tienes que decirme la estrategia en la que quieres utilizarlo.


No sé nada de programación y soy principiante.

Tal vez este asesor ya tiene, en general, así:

Según el principio de "rollover" el cruce de dos EMAs cierra la anterior abre una nueva, las EMAs deben ser variables.

Creo que en H1, H4 es bastante relevante.

 
riabusha:


Tal vez tal EA ya existe, así es como funciona:

Según el principio de "rollover" el cruce de dos EMAs cierra la anterior abre una nueva, las EMAs deben ser variables.

Creo que en H1, H4 es bastante relevante.

Sí, es la Media Móvil estándar incluida en el paquete de MT4. Pero no es EMA, sino SMA (Simple Moving Average), lo que no cambia el asunto. Por supuesto, podemos cambiar el tipo de MA en el EA o incluso moverlo a parámetros externos, pero no se convertirá en un grial.
 

Hola.

Por favor, haga un simple Asesor Experto que abra una orden para una cierta cantidad de puntos y si el precio los pasó y cerró en el lado +, la orden se cierra y se abre de nuevo en el lado positivo. Si está en posición negativa, se invierte a la posición negativa.

Parámetros a establecer - Tamaño del lote y número de puntos a pasar.

Muchas gracias de antemano.

Saludos Dimitriy.

 
kvg31:

Escribiré un asesor de cualquier complejidad. Lo principal es tener una buena idea. Cómo lo va a utilizar no me importa: lo venderá - no me importa (no le pediré dinero).

P. S. Si necesitas un indicador, tienes que indicarme la estrategia en la que quieres utilizarlo.


Hola Estimados desarrolladores. Por favor, ayúdenme a crear un indicador basado en el indicador SSL_fast_sBar_mtf.

Quiero que dibuje dos "reglas", una con valor "Lb" más grande y otra con valor más pequeño (o TIME FREAM más grande y más pequeño). Si en la barra los colores

de ambas "reglas" son iguales (y en la anterior eran diferentes), entonces al inicio de la siguiente barra debe dar la señal de apertura (colocar la flecha).

Las flechas deben ser dibujadas usando buffers de indicadores, no objetos gráficos. Los datos de ambas "reglas" son necesarios en la ventana de parámetros externos

(para una mayor selección de sus parámetros).

 

http://savepic.ru/1965498.gif

No sé cómo enviar un enlace al indicador. Está en la biblioteca MQL4.com

 

¡Buenas tardes!

Mucho pido hacer un experto (bueno no soy programador) :((.

Parámetros técnicos:
1) Trabajamos en un gráfico de velas de 4 horas cruzando dos líneas Moving Average: una(Roja) período 18, método Exponencial, a los precios de Cierre, respectivamente(Amarilla) período 8, método también Exponencial, a los precios de Cierre.

2) Tamaño de la operación 1 lote

3) Trabajamos de cruce en cruce de líneas. Tan pronto como la líneaamarilla cruza la línea roja(Red) en la dirección hacia arriba (norte), orden de compra, el segundo cruce de líneas, la línea amarilla cruza en consecuencia la roja desde arriba hacia abajo - fijación de la orden abierta, con la apertura simultánea de una nueva orden de venta, y así sucesivamente.

4) Se establece un stop loss de 35 puntos para todas las operaciones.

El gráfico de 4 horas permite evitar movimientos innecesarios, a diferencia del gráfico horario, que funciona con seguridad.

Si sólo se miran los pares de divisas, la idea se justifica por sí misma (no hay operaciones con pérdidas, alrededor de cero en el peor de los casos), por supuesto, se debe tener en cuenta la tendencia y utilizar el Asesor Experto mientras se mira hacia atrás. Como ejemplo, para el par EUR/USD, si el 1 de septiembre compramos +139 puntos antes de cruzar +115 puntos, entonces compramos de nuevo antes de cruzar +1184 puntos el 12 de octubre. Tome agosto la misma imagen +368 puntos de venta, a continuación, comprar la venta en el mismo nivel sin ninguna pérdida y +181 puntos hacia abajo en la venta de beneficios. Además, por ejemplo el oro GOLD(la comisión es de 70 puntos, pero el punto es de 2,5 dólares por lote) y así desde el 31 de agosto comprar +1789 puntos, a la vez vender +547 puntos, +4557 puntos comprar, vender nulo, +4328 comprar, vender nulo y hasta este fin de semana de nuevo +3636 puntos.

Saludos, Yuriy

 
Hola! Chicos, no puedo entender mql4(( Quiero escribir un pequeño EA basado en dos EMA's (promedios móviles) Que dan un pitido después de cruzar? ¿Puede decirme algo sobre este programa? ¡¡¡Gracias de antemano !!!
 
silmin85:
Hola chicos, no puedo entender mql4(( Quiero escribir un pequeño EA basado en dos EMA's (medias móviles) Que dan un pitido después de cruzar? ¿Puede decirme algo sobre este programa? ¡¡¡Gracias de antemano !!!
Tome como base la Media Móvil estándar incluida en el paquete y experimente con ella. Puede sustituir la MA por la EMA.
 
goldtrader:
Tome como base la Media Móvil estándar suministrada y experimente con ella. Puede sustituir la MA por la EMA.
¡El caso es que quiero un simple EA que dé un pitido cada vez que cruce dos EMAs! MetaTradere tiene un Moving Average.mq4 en expertos

Esta es la descripción completa:

//+------------------------------------------------------------------+

//| Media móvil.mq4 |
//| Copyright © 2005, MetaQuotes Software Corp.
//| http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#define MAGICMA 20050610

extern double Lots = 0.1;
extern double RiesgoMáximo = 0,02;
extern double DecreaseFactor = 3;
extern double PeriodoMovimiento = 12;
extern double Desplazamiento = 6;
//+------------------------------------------------------------------+
//| Calcular las posiciones abiertas |
//+------------------------------------------------------------------+
int CalcularPedidosActualizados(símbolo de cadena)
{
int compras=0,ventas=0;
//----
for(int i=0;i<TotalPedidos();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
{
if(OrderType()==OP_BUY) buys++;
if(OrderType()==OP_SELL) vende++;
}
}
//---- volumen de pedidos de devolución
if(compras>0) return(compras);
Si no es así, return(-sells);
}
//+------------------------------------------------------------------+
//| Calcular el tamaño óptimo del lote |
//+------------------------------------------------------------------+
double LotsOptimized()
{
doble lote=Lotes;
int orders=HistoryTotal(); // total de pedidos del historial
int losses=0; // número de órdenes de pérdidas sin pausa
//---- seleccione el tamaño del lote
lote=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,1);
//---- calcule el número de órdenes de pérdidas sin interrupción
si(Factor de disminución>0)
{
for(int i=órdenes-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("¡Error en el historial!"); break; }
if(OrderSymbol()!=Symbol() | OrderType()>OP_SELL) continue;
//----
if(OrderProfit()>0) break;
if(OrderProfit()<0) pérdidas++;
}
if(losses>1) lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1);
}
//---- devolver el tamaño del lote
if(lot<0.1) lot=0.1;
devolución(lote);
}
//+------------------------------------------------------------------+
//| Comprueba las condiciones de las órdenes abiertas |
//+------------------------------------------------------------------+
void CheckForOpen()
{
doble ma;
int res;
//---- ir a negociar sólo para los primeros tiks del nuevo bar
if(Volumen[0]>1) return;
//---- obtener la media móvil
ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);
//---- condiciones de venta
if(Open[1]>ma && Close[1]<ma)
{
res=Enviar orden(Símbolo(),OP_Venta,LotesOptimizados(),Oferta,3,0,0,",MAGICMA,0,Rojo);
volver;
}
//---- comprar condiciones
if(Open[1]<ma && Close[1]>ma)
{
res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,0,0,",MAGICMA,0,Blue);
volver;
}
//----
}
//+------------------------------------------------------------------+
//| Comprueba las condiciones de cierre de la orden |
//+------------------------------------------------------------------+
void CheckForClose()
{
doble ma;
//---- ir a negociar sólo para los primeros tiks del nuevo bar
if(Volumen[0]>1) return;
//---- obtener la media móvil
ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);
//----
for(int i=0;i<TotalPedidos();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()!=MAGICMA | OrderSymbol()!=Symbol()) continue;
//---- comprobar el tipo de orden
if(OrderType()==OP_BUY)
{
if(Open[1]>ma && Close[1]<ma) OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
romper;
}
if(OrderType()==OP_SELL)
{
if(Open[1]<ma && Close[1]>ma) OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
romper;
}
}
//----
}
//+------------------------------------------------------------------+
//| Función de inicio |
//+------------------------------------------------------------------+
void start()
{
//---- comprobar el historial y el comercio
if(Bars<100 || IsTradeAllowed()==false) return;
//---- calcular las órdenes abiertas por el símbolo actual
if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
else CheckForClose();
//----
}

//+------------------------------------------------------------------+

¡Cómo lo cambio aquí para que me funcione no lo entiendo! ¡¡¡Sólo quiero 50EMA y 100EMA y un pitido en cada cruce!!!

Razón de la queja: