¿Cómo codificar? - página 182

 

...

No es un error en el código

Vaya a Herramientas->Centro de historia y luego elija y descargue los datos de 1 minuto del símbolo que desea probar (todo lo que necesita para una precisión del 90% son los datos de 1 minuto, no es necesario descargar el resto)

Badguy:
Hola Coders

Todavía estoy aprendiendo mis primeros pasos en MQL-Code.

Cual es la razón cuando tengo el siguiente mensaje en el diario:

Testgenerator:

unmatched data error ( volume limit 159 at 2009.05.06 19 15 exceeded )

¿dónde debo mirar en el código?

Gracias
 
abundance:
Mi amigo y yo estamos trabajando en un EA. En algún momento (el EA) necesita leer y recuperar el precio a una hora determinada, digamos, 17:00 EST... etc.

¿Puede algún veterano aconsejar cómo hacerlo, en lugar de contar las barras de precios hacia atrás? Tal vez ya hay una función escrita para ello. Por favor, ayuda. Gracias a todos y que Dios los bendiga.

B rgds/abundancia

iBarShift(..) ayuda a encontrar el número de la barra en su gráfico, y luego utilizar Cerrar o Abrir.

 
Roger09:
iBarShift(..) ayuda a encontrar el número de barra en tu gráfico, luego usa Close o Open.

Gracias, Roger. Ha sido de gran ayuda. Y perdón por no haberlo dejado más claro. Necesitamos los precios de oferta y demanda. ¿Cómo podemos obtenerlos? Por favor, disculpe si es una pregunta tonta

B rgds/abundancia

 

Error de datos

Hola mladen

gracias por tu rápida respuesta.

Creo que no es un problema del tickdata, porque cuando pruebo con otro EA funciona bien.

Creo que es un problema con el Custom-Indicator.

Voy a construir en seguir indi: AllAverages_v2.3

double ALL_AVERAGES_0 = iCustom(NULL,ALL_AVERA_TF, "AllAverages_v2.3",ALL_AVERA_PERIOD,ALL_AVERA_SHIFT,ALL_AVERA_METHOD,ALL_AVERA_PRICE,0);

ahora tengo el siguiente mensaje: número de búfer de índice no válido en la función iCustom

¿Cómo definir este iCustom correctamente?

Hola mladen He encontrado el problema

He olvidado un parámetro: Color

la definición correcta:

double ALL_AVERAGES_0 = iCustom(NULL,ALL_AVERA_TF, "AllAverages_v2.3",ALL_AVERA_PERIOD,ALL_AVERA_SHIFT,ALL_AVERA_METHOD,ALL_AVERA_PRICE,ALL_AVERA_COLOR,0);

mladen:
No es un error en el código Vaya a Herramientas->Centro de Historia y luego elija y descargue los datos de 1 minuto del símbolo que desea probar (todo lo que necesita para una precisión del 90% son los datos de 1 minuto, no es necesario descargar el resto)
Archivos adjuntos:
 
abundance:
Gracias Roger. Ha sido de gran ayuda. Y lo siento por no dejarlo más claro. Necesitamos ambos precios Bid y Ask. ¿Cómo podemos obtenerlos? Por favor, disculpe si es una pregunta tonta B rgds/abundance

Todos los precios en los gráficos son Bid. Ask=Bid+MarketInfo(Symbol(),MODE_SPREAD)*Point;

 

Restringir las operaciones

Así que empecé a escribir un EA básico con uno de esos constructores de EAs que generan plantillas. Parece que he conseguido la premisa de la plantilla de EA abajo, sin embargo, necesito una manera de hacer la EA sólo entrar en un comercio en el máximo. Ahora mismo sigue generando operaciones y hace que el draw down sea ridículo. Aquí está el código de lote de comercio:

//Comprobar posición

bool IsTrade = False;

for (int i = 0; i < Total; i ++) {

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) {

IsTrade = True;

if(OrderType() == OP_BUY) {

//Cerrar

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

//| Señal Inicio(Salida Compra) || /Cerrar

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

if (CloseBuy1_1 >= CloseBuy1_2) Orden = SIGNAL_CLOSEBUY;

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

//| Señal de Fin(Salir de la Compra) |++

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

if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");

if (!EachTickMode) BarCount = Bars;

IsTrade = False;

continuar;

}

//Trailing stop

if(UseTrailingStop && TrailingStop > 0) {

if(Bid - OrderOpenPrice() > Point * TrailingStop) {

if(OrderStopLoss() < Bid - Point * TrailingStop) {

OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);

if (!EachTickMode) BarCount = Bars;

continuar;

}

}

}

} else {

//Cerrar

Si alguien pudiera ayudar, se lo agradecería mucho.

 
Styex:
Así que empecé a escribir un EA básico con uno de esos constructores de EAs generadores de plantillas. Parece que he conseguido la premisa de la plantilla de EA abajo, sin embargo, necesito una manera de hacer la EA sólo entrar en un comercio en el máximo. En este momento se mantiene la generación de operaciones y hace que el sorteo hacia abajo para ser rediculous. Si alguien puede ayudar, sería muy apreciada.
if (OrdersTotal() == 0)

{

//Check position

bool IsTrade = False;

for (int i = 0; i < Total; i ++) {

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) {

IsTrade = True;

if(OrderType() == OP_BUY) {

//Close

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

//| Signal Begin(Exit Buy) |

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

if (CloseBuy1_1 >= CloseBuy1_2) Order = SIGNAL_CLOSEBUY;

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

//| Signal End(Exit Buy) |

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

if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");

if (!EachTickMode) BarCount = Bars;

IsTrade = False;

continue;

}

//Trailing stop

if(UseTrailingStop && TrailingStop > 0) {

if(Bid - OrderOpenPrice() > Point * TrailingStop) {

if(OrderStopLoss() < Bid - Point * TrailingStop) {

OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);

if (!EachTickMode) BarCount = Bars;

continue;

}

}

}

} else {

//Close

}
 

Gracias OnTheRoad

He encontrado este EA, no entiendo algunas cosas.

bool get_signal()

{

bool enable_trade = false;

int trend_up = 0;

int trend_down = 0;

int i;

ArrayInitialize( TradeSign, false );

if( Bars >= 100 ){

for( i = 0 ; i < DEF_MA_NUM ; i++ ){

Buf_MA[0][ i ] = calc_SMA( PERIOD_M30, MA_prm_1, i );

Buf_MA[1][ i ] = calc_SMA( PERIOD_M30, MA_prm_2, i );

Buf_MA[2][ i ] = calc_SMA( PERIOD_M30, MA_prm_3, i );

Buf_MA[3][ i ] = calc_SMA( PERIOD_M30, MA_prm_4, i );

Buf_MA[4][ i ] = calc_SMA( PERIOD_M30, MA_prm_5, i );

}

double vRSI = iRSI( Symbol(), PERIOD_M5, RSI_period5, PRICE_CLOSE, 0 );

double vRSI2 = iRSI( Symbol(), PERIOD_M1, RSI_period1, PRICE_CLOSE, 0 );

for( i = 0 ; i < DEF_MA_TYP ; i++ ){

if((Buf_MA[2] < Buf_MA[1]) && (Buf_MA[1] < Buf_MA[0])){

trend_up++;

}

}

if((trend_up > 3) && (vRSI <= RSI_lower) && (vRSI2 <= RSI_lower)){

TradeSign[SIG_Buy] = true;

enable_trade = true;

}

for( i = 0 ; i < DEF_MA_TYP ; i++ ){

if((Buf_MA[2] > Buf_MA[1]) && (Buf_MA[1] > Buf_MA[0])){

trend_down++;

}

}

if((trend_down > 3) && (vRSI >= RSI_upper) && (vRSI2 >= RSI_upper)){

TradeSign[SIG_Sell] = true;

enable_trade = true;

}

}

return(enable_trade);

}

double calc_SMA( int timeframe, int period, int offset )

{

double vMA = 0;

double sum=0;

int i;

for( i = 0 ; i < period ; i++ ){

sum += iClose( Symbol(), timeframe, i + offset );

}

vMA = suma / periodo;

return(vMA);

}

hay una parte en la que "trendup>3", ¿se calcula a partir de un array? ¿Cómo funciona un array, para que pueda dar "trendup>3"? ¿Esto es para saber la media de una sola línea (esa línea es probable que suba o baje)? No entiendo cómo funciona.
Archivos adjuntos:
 

¿Cómo reiniciar los expertos cuando se alcanza el beneficio objetivo? Estoy usando la estrategia de martingala pero no abre los lotes en secuencia...

ejemplo: lotes 0.1, 0.2, 0.4, 0.8, 1.6

abrir lotes: 0.1, 0.2, 0.4 -> tomar ganancias en los lotes 0.4 pero los siguientes lotes son 0. 8, 0.1, 0.2, 0.4...

¿alguien puede ayudar...?

int T=0;

for(int i=0;i<OrdersTotal();i++) {

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

if(OrderSymbol()==Symbol() && OrderComment()==Name_ExpertS)

{ T++;

if(OrderType()==OP_BUY) s=1;

if(OrderType()==OP_SELL) s=2;

Last=OrderOpenPrice();

}}

if (Lots<0.1) Lots=0.1;

for (int j=0;j<T;j++)

{

Lots=LotsUP[j];

}
 

Alto/Bajo con Criterios

Estoy tratando de codificar un indicador que busque cosas específicas antes de afirmar que una vela es el verdadero máximo o el verdadero mínimo. Estos son básicamente los criterios (adjunto un gráfico para ayudar a explicar):

1. Busque un cierre que sea más bajo que los 20 cierres anteriores (la segunda flecha es este punto), entonces (2) 12 barras después el cierre debe ser más alto que los 12 cierres anteriores (la tercera flecha). Esta tendencia alcista continuará hasta que (3) haya un cierre que sea más bajo que los 7 cierres anteriores (la cuarta flecha).

He intentado utilizar la función iLowest sin mucho éxito. Creo que mi mejor opción es usar un array, pero mis conocimientos de arrays son limitados.

¿Alguna idea o ejemplo sobre cómo utilizar ArrayMinimum y ArrayMaximum? O si hay una manera de conseguir el iLowest y iHighest para trabajar?

Archivos adjuntos:
Razón de la queja: