¿Cómo codificar? - página 160

 
increase:
Parece que nadie me ayuda, chicos, por favor respondan

Con una cantidad moderada de conjeturas, sugeriría que el problema está en el indicador, o en su extensión, y no en su uso de iCustom. ¿Quizás sería mejor asignar los buffers 2 y 3 junto con las alertas? (Aunque no pude averiguar cómo/cuándo se asignarían sus valores de índice cero ([0]) de todos modos).

 

Información de datos de precios

Mis salidas y entradas se basan en señales que generan una condición en la apertura de la siguiente barra (entrada y salida), ¿debería utilizar los precios de apertura para los indicadores y las medias móviles? Siempre he utilizado los datos del final del día para las operaciones bursátiles, así que naturalmente eso es lo que he gravitado hacia. ¿Cuál es el consenso por ahí?

 

Sólo pensaba

cómo se establece un trailing stop en el nivel mínimo de los pares, de manera que si el nivel de stop está en 4 pip o 25 pip, el sl se activará en ese nivel, dependiendo del par.

Debería decir que cómo se utiliza la especificación del contrato para cada par.

Saludos

Beno

 

Indicador Sidus_Bago

Hola aumento,

Me pregunto si puedes ayudarme a codificar Sidus_Bago para que sea un indicador MTF. Creo que este indicador muy bueno también.

Sidus_Bago está aquí:

Indicador 'Sidus System confirmation'?

Muchas gracias.

 

¿Puede alguien ayudarme con este EA?

Hola a todos,

He tenido un ir en mi primera EA, pero no se compila, me sale un error "'\end of program' - unbalanced left parenthesis" y he ido a través de él un par de veces, pero no puede encontrar el problema. No te preocupes por la lógica de la estrategia de trading (a no ser que te interese), ya trabajaré en ello cuando se compile y se ejecute...

Al parecer no tengo permiso para adjuntar archivos, así que perdón por el corte y pegado también.

Gracias,

Rob,

Perth, Aus

//---------------

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

//| Rob_Ea.mq4 |||

//| Rob Cousins

//| |

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

#property copyright "Rob Cousins"

#property link ""

#define MAGICMA 20090216

//---- parámetros de entrada

extern double Lots;

extern int Corto_MA=5;

extern int Long_MA=15;

extern double Stoch_Upper=70,0

extern double Stoch_Lower=30,0;

extern double RSI_Upper=80,0

extern double RSI_Lower=20,0;

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

//| función de inicialización de expertos ||.

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

int init()

{

//----

//----

return(0);

}

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

//| función de desinicialización experta ||

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

int deinit()

{

//----

//----

return(0);

}

string Indicación_actual()

{

// Variables de la media móvil

double MA_Short;

double MA_Long;

string Indicador_MA_actual

cadena Previous_MA_Indicator;

string MA_Indicator;

// Variables estocásticas

string Current_Stoch_Indicator; string Previous_Stoch_Indicator

string Previous_Stoch_Indicator; // Variables estocásticas

string Stoch_Indicator;

// Variables RSI

string Current_RSI_Indicator; string Previous_RSI_Indicator

string Previous_RSI_Indicator;

string RSI_Indicator;

// --------------------------------------

// primero obtenga las MAs y compruebe si hay un cruce de MAs

// --------------------------------------

MA_Short=iMA(NULL,0,Short_MA,0,1,PRICE_MEDIAN,0);

MA_Long=iMA(NULL,0,Long_MA,0,0,PRICE_MEDIAN,0);

si (MA_Short>MA_Long) Current_MA_Indicator="BUY";

if (MA_Short<MA_Long) Current_MA_Indicator="SELL";

// establecer el valor anterior y actual utilizando la MA desplazada (el último '1' de las opciones)

if (iMA(NULL,0,Short_MA,0,1,PRICE_MEDIAN,1)>iMA(NULL,0,Long_MA,0,0,PRICE_MEDIAN,1)) Previous_MA_Indicator="COMPRA";

if (iMA(NULL,0,Short_MA,0,1,PRICE_MEDIAN,1)<iMA(NULL,0,Long_MA,0,0,PRICE_MEDIAN,1)) Previous_MA_Indicator="VENTA";

if ((Current_MA_Indicator=="BUY") && (Previous_MA_Indicator=="BUY")) MA_Indicator="COMPRA";

if ((Current_MA_Indicator=="SELL") && (Previous_MA_Indicator=="SELL")) MA_Indicator="VENTA";

// ----------------------------

// Comprobación del indicador estocástico

// ----------------------------

if(iStochastic(NULL,0,6,3,3,MODE_SMA,0,MODE_MAIN,0)>Stoch_Upper) Current_Stoch_Indicator="BUY";

if(iStochastic(NULL,0,6,3,3,MODE_SMA,0,MODE_MAIN,0)<Stoch_Lower) Current_Stoch_Indicator="SELL";

if(iStochastic(NULL,0,6,3,3,MODE_SMA,0,MODE_MAIN,1)>Stoch_Upper) Previous_Stoch_Indicator="COMPRA";

if(iStoch(NULL,0,6,3,3,MODE_SMA,0,MODE_MAIN,1)<Stoch_Lower) Previous_Stoch_Indicator="SELL";

if ((Current_Stoch_Indicator=="BUY") && (Previous_Stoch_Indicator=="BUY")) Stoch_Indicator="COMPRA";

if ((Current_Stoch_Indicator=="SELL") && (Previous_Stoch_Indicator=="SELL")) Stoch_Indicator="VENTA";

// ----------------------------

// Comprobación del indicador RSI

// ----------------------------

if(iRSI(NULL,0,3,PRICE_CLOSE,0)>RSI_Upper) Current_RSI_Indicator="BUY";

if(iRSI(NULL,0,3,PRICE_CLOSE,0)<RSI_Lower) Current_RSI_Indicator="SELL";

if(iRSI(NULL,0,3,PRICE_CLOSE,1)>RSI_Upper) Previous_RSI_Indicator="BUY";

if(iRSI(NULL,0,3,PRICE_CLOSE,1)<RSI_Lower) Previous_RSI_Indicator="SELL";

if ((Current_RSI_Indicator=="BUY") && (Previous_RSI_Indicator=="BUY")) RSI_Indicator="COMPRA";

if ((Current_RSI_Indicator=="SELL") && (Previous_RSI_Indicator=="SELL")) RSI_Indicator="SELL";

//----------------------------------------

// Averigua si estás en una situación de compra o de venta

//----------------------------------------

if((MA_Indicator=="BUY") && (Stoch_Indicator=="BUY") && (RSI_Indicator=="BUY") return("BUY");

if((MA_Indicator=="SELL") && (Stoch_Indicator=="SELL") && (RSI_Indicator=="SELL") return("SELL");

}

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

//| Calcule las posiciones abiertas ||.

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

string Posición_actual(string símbolo)

{

//----

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

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)

{

return ("NONE");

break;

}

if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)

{

if(OrderType()==OP_BUY) return("BUY");

if(OrderType()==OP_SELL) return("SELL");

}

}

}

//----------------------------------------------------------------------

// Si la señal ha cambiado de dirección, lo primero que hay que hacer es cerrar

// la actual operación abierta antes de abrir otra.

//-----------------------------------------------------------------------

void CloseTrade(string symbol)

{

// doble ma;

//---- ir a negociar sólo para los primeros tiks de la nueva barra

// if(Volume[0]>1) return;

//----

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

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; // no hay operaciones abiertas

if(OrderMagicNumber()!=MAGICMA | OrderSymbol()!=Symbol()) continue;

//---- comprueba el tipo de orden

// dejando las dos opciones por el momento por si quiero hacerlo de otra manera

// por ejemplo, tener un color diferente, o lo que sea. Por lo demás, las dos órdenes son iguales

// y sólo necesitaría uno. Excepto los precios diferentes supongo... ¡Doh!

if(OrderType()==OP_BUY)

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,White);

romper;

}

if(OrderType()==OP_SELL)

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,White);

break;

}

}

//----

}

//-----------------------------------------------------------

// Abrir una posición si eso es lo que dicen las hojas de té

//------------------------------------------------------------

void OpenTrade(string symbol,string Type)

{

int res;

//---- condiciones de compra

if(Type=="BUY") OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0, "ROB EA TEST",MAGICMA,0,Blue);

//---- condiciones de venta

if(Type=="SELL") OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0, "ROB EA TEST",MAGICMA,0,Red);

}

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

//| función de inicio de experto ||

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

void start()

{

//----

//---- calcular las órdenes abiertas por el símbolo actual

//--- Si no hay operaciones abiertas, entonces simplemente abra una...

if(Current_Trade(Symbol())=="NONE") OpenTrade(Symbol(),Current_Indication());

// Pero si hay una operación abierta tenemos que cerrarla primero antes de abrir la nueva.

if ((Current_Trade(Symbol())=="BUY") && (Current_Indication()=="SELL"));

{

CloseTrade(Symbol());

OpenTrade(Symbol(),Current_Indication());

}

if ((Current_Trade(Symbol())=="SELL") && (Current_Indication()=="BUY"));

{

CloseTrade(Symbol());

OpenTrade(Symbol(),Current_Indication());

}

devolver;

}

 

ahí tienes.........................................

Archivos adjuntos:
robtestea.mq4  7 kb
 

¡Bien, eso fue rápido! Muchas gracias. ¿Cuál era el problema?

Rob.

 

Problema con la escritura de archivos

Estoy programando un EA que utiliza archivos para mantener los resultados de las operaciones (pérdidas, ganancias) con los valores de los indicadores, así que cuando el EA entra en una operación escribo los valores de los indicadores y la hora en que se hizo la operación en el archivo "sellOpenInd.tab":

Después de esta operación el archivo incluye:

CCISDivPresent 22 69 0.000024 0.000046 0.000045 -0.000015 2002.05.07 13:00

CCISDivPresent 66 85 0.000064 0.000032 0.000037 -0.000033 2002.05.15 07:00

CCISDivPresent 77 90 0.000041 -0.000029 0.000008 -0.000020 2002.06.03 08:00

etc...

In next stage i open this file and look into history for dates of opened orders then i check results of this trades and write into file "sellResults.tab"+indicators values writen in previous stage(above) .And here problem occures, only one same trade is recorded:

Rule7 Rule6 Rule5 Rule4 Rule3 Rule2 Rule1 TradeOutcome

-0.000015 0.000045 0.000046 0.000024 69 22 CCISDivPresent win

-0.000015 0.000045 0.000046 0.000024 69 22 CCISDivPresent win

-0.000015 0.000045 0.000046 0.000024 69 22 CCISDivPresent win

etc..

Here is my code(i know is not looking nice ):

int dates=FileOpen("sellOpenInd.tab", FILE_CSV|FILE_READ,"\t");

if(dates>0){

for(k=0;k<=10;k++){ //i use for loop instead of while(!FileIsEnding(dates) ) because ea enters in infinite loop for unknown reasons

dates=FileOpen("sellOpenInd.tab", FILE_CSV|FILE_READ,"\t");

FileSeek(dates,filepos,SEEK_SET);

while (FileIsLineEnding(dates)==FALSE){filestr=FileReadString(dates)+"\t"+filestr;filepos=filepos+FileTell(dates);}

decodeFile(filestr);//calling function which decodes readed string line, then writing results to global varaiables filter7 ,filter6 etc.

Comment(filterS7);

for (i =OrdersHistoryTotal()-1; i>=0; i--) {

OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);

if (OrderSymbol() == Currencies) {

if((OrderMagicNumber()==16381||OrderMagicNumber()==16383)&&OrderCloseTime()!=0){

historyDateTime=TimeToStr(OrderOpenTime());

OrderP=OrderProfit();

if(OrderP>0)orderresult="win";

if(OrderP<=0)orderresult="loss";

if(filterS7==historyDateTime) {

testFline=filterS6+"\t"+filterS5+"\t"+filterS4+"\t"+filterS3+"\t"+filterS2+"\t"+filterS1+"\t"+filterS0+"\t"+orderresult;

results=FileOpen("sellResults.tab", FILE_READ|FILE_WRITE,"\t");

FileSeek(results,0,SEEK_END);

FileWrite(results,testFline);

testFline="";

filestr="";

}

}

}

}

if(!FileIsEnding(dates)){FileClose(dates);FileClose(results);filepos=0;break;

}

}

}

 

En cada paso de su ciclo abre el archivo "sellOpenInd.tab" una y otra vez.

Intenta esto:

int dates=FileOpen("sellOpenInd.tab", FILE_CSV|FILE_READ,"\t");

if(dates>0){

for(k=0;k<=10;k++){ //i use for loop instead of while(!FileIsEnding(dates) ) because ea enters in infinite loop for unknown reasons

FileSeek(dates,filepos,SEEK_SET);

while (FileIsLineEnding(dates)==FALSE){filestr=FileReadString(dates)+"\t"+filestr;filepos=filepos+FileTell(dates);}

decodeFile(filestr);//calling function which decodes readed string line, then writing results to global varaiables filter7 ,filter6 etc.

Comment(filterS7);

for (i =OrdersHistoryTotal()-1; i>=0; i--) {

OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);

if (OrderSymbol() == Currencies) {

if((OrderMagicNumber()==16381||OrderMagicNumber()==16383)&&OrderCloseTime()!=0){

historyDateTime=TimeToStr(OrderOpenTime());

OrderP=OrderProfit();

if(OrderP>0)orderresult="win";

if(OrderP<=0)orderresult="loss";

if(filterS7==historyDateTime) {

testFline=filterS6+"\t"+filterS5+"\t"+filterS4+"\t"+filterS3+"\t"+filterS2+"\t"+filterS1+"\t"+filterS0+"\t"+orderresult;

results=FileOpen("sellResults.tab", FILE_READ|FILE_WRITE,"\t");

FileSeek(results,0,SEEK_END);

FileWrite(results,testFline);

testFline="";

filestr="";

}

}

}

}

if(!FileIsEnding(dates)){FileClose(dates);FileClose(results);filepos=0;break;

}

}

}
 

Hola Roger09 ya lo he intentado y no me ha servido de nada, parece que el puntero no se mueve a la siguiente línea, pero no sé por qué.

De todas formas gracias por la respuesta.

Razón de la queja: