Como codificar? - página 160

 
increase:
Parece que nunca conseguiria a ajuda de ninguém, pessoal, por favor, respondam

Com uma quantidade moderada de trabalho de adivinhação, eu sugeriria que o problema é com o indicador, ou sua extensão a ele, e não seu uso do iCustom. Talvez seja melhor atribuir buffers 2 e 3 junto com os alertas? (Embora eu não conseguisse descobrir como/quando seus valores índice-zero ([0]) seriam atribuídos de qualquer forma).

 

Informações sobre os preços

Minhas saídas e entradas são baseadas em sinais que geram uma condição na abertura da próxima barra (entrada e saída), devo usar os preços abertos para indicadores e médias móveis? Sempre usei dados de fim de dia para o comércio de ações, então naturalmente é para isso que eu tenho gravitado. Qual é o consenso lá fora?

 

Só de pensar

como definir uma parada móvel no nível mínimo de parada dos pares, de modo que se o nível de parada estiver em 4 pip ou 25 pip, o sl slick fará efeito, dependendo do par.

Eu deveria dizer que como você usa a especificação do contrato para cada par.

Saúde

Beno

 

Indicador Sidus_Bago

Olá aumento,

Será que você pode me ajudar a codificar Sidus_Bago para ser um indicador MTF? Eu também acho este indicador muito bom.

O Sidus_Bago está aqui:

Indicador "Sidus System confirmation"?

Muito obrigado.

 

Alguém pode me ajudar com esta EA?

Olá a todos,

Tive uma tentativa na minha primeira EA, mas ela não se compila; recebo um erro "'fim do programa' - parêntese esquerda desequilibrada" e já passei por isso algumas vezes, mas não consigo encontrar o problema. Não se preocupe com a lógica da estratégia comercial (a menos que você esteja interessado), vou trabalhar nisso assim que ele compilar e correr...

Aparentemente não tenho permissão para anexar arquivos, lamento muito pelo corte e cola também.

Obrigado,

Rob,

Perth, Aus

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

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

//| Rob_Ea.mq4 |

//| Primos Rob Cousins |

//| |

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

#propriedade copyright "Rob Cousins

#ligação de propriedade ""

#define MAGICMA 20090216

//---- parâmetros de entrada

Lotes duplos externos;

externo int Short_MA=5;

Exterior int Longa_MA=15;

duplo externo Stoch_Upper=70.0;

duplo Stoch_Lower=30.0;

duplo externo RSI_Upper=80.0;

duplo RSI_Lower=20.0; duplo RSI_Lower=20.0;

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

//| função de iniciação de especialista |

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

int init()

{

//----

//----

retorno(0);

}

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

//| função de desinicialização especializada |

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

int deinit()

{

//----

//----

retorno(0);

}

Indicação_da_corrente()

{

// Variáveis médias móveis

duplo MA_Short;

duplo MA_Long;

corrente de corda INDICADOR_MA_Corrente;

string Previous_MA_Indicator;

cadeia de caracteres MA_Indicador_MA;

// Variáveis estocásticas

Corrente de corda Indicador_de_Corrente;

string Previous_Stoch_Indicator;

string Stoch_Indicator; string Stoch_Indicator;

// Variáveis de RSI

corrente de corda_RSI_Indicador;

string Previous_RSI_Indicator;

string RSI_Indicator; string RSI_Indicator;

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

// primeiro obtenha MAs e verifique se há uma Cruz MA

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

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

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

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

if (MA_Short>MA_Long) Corrente_MA_Indicator="SELL";

// definir o valor anterior e atual usando o MA deslocado (o último '1' nas opções)

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

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

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

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

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

// Verificação do indicador estocástico

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

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

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

if(iStoch_Indicator="VENDER") Previous_Stoch_Indicator="BUY";

if(iStoch_Indicator="COMPRAR"; if(iStoch_Próximo) Previous_Stoch_Indicator="SELL";

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

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

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

// Verificação do 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) Corrente_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="BUY";

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

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

// Descubra se você está em uma situação de compra ou venda

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

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

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

}

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

//| Calcular posições abertas |

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

string Current_Trade(string symbol)

{

//----

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

{

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

{

retornar ("NENHUM");

pausa;

}

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

{

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

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

}

}

}

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

// Se o sinal mudou de direção, a primeira coisa a fazer é Fechar

// o comércio aberto atual antes de abrir outro.

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

void CloseTrade(símbolo de corda)

{

// duplo ma;

//---- go trading only for first tiks of new bar

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

//----

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

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==falso) break; // não há negociações em aberto

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

//---- verificar tipo de pedido

// deixando para o momento ambas as opções, caso eu queira fazer isso de maneira diferente

// por exemplo, ter uma cor diferente, ou o que quer que seja. Caso contrário, os dois comandos são os mesmos

// e você precisaria apenas de um. Exceto os diferentes preços, suponho... Doh!

if(OrderType()==OP_BUY)

{

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

break;

}

if(OrderType()==OP_SELL)

{

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

intervalo;

}

}

//----

}

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

// Abrir uma posição se é isso que as folhas de chá dizem

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

OpenTrade(símbolo de corda, tipo de corda) vazio

{

int res;

//---- condições de compra

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

//---- condições de venda

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

}

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

//| função de início especializado |

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

início nulo()

{

//----

//---- calcular pedidos em aberto pelo símbolo atual

//--- Se não há negócios abertos, então simplesmente abra um...

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

// Mas se houver uma negociação aberta, precisamos fechá-la primeiro antes de abrir a nova negociação.

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

{

CloseTrade(Símbolo());

OpenTrade(Symbol(),Current_Indication());

}

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

{

CloseTrade(Símbolo());

OpenTrade(Symbol(),Current_Indication());

}

retornar;

}

 

lá você vai.........................................

Arquivos anexados:
robtestea.mq4  7 kb
 

OK, isso foi rápido! Muito obrigado. Qual foi o problema?

Rob.

 

Problema com a redação do arquivo

Estou programando e a EA usa arquivos para manter os resultados do comércio (perda, ganho) com valores de indicadores. Assim, quando a EA entra no comércio eu escrevo valores de indicadores e tempo, quando o comércio foi feito, para arquivar "sellOpenInd.tab":

Após esta operação, o arquivo inclui:

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;

}

}

}

 

Cada passo em seu ciclo você abre o arquivo "sellOpenInd.tab" uma e outra vez.

Tente isto:

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;

}

}

}
 

Oi Roger09 tentei isto antes e não ajudou. Parece que o ponteiro não está se movendo para a próxima linha, mas não sei por quê.

De qualquer forma, obrigado pela resposta.

Razão: