OrdemFechar não funciona - página 3

 

Graças a thrdel, vou analisar sua codificação. Você é realmente muito gentil. Mais uma vez, obrigado.

 
thrdel:


Se você quer dizer que não é a melhor maneira de fechar uma ordem, concordo, mas se o cara não quer usar OrderSelect (ou não sabe como) e não deixa nenhuma ordem em aberto no mercado, ele funciona.

Tentamos nos ajudar aqui e sua resposta não ajudou um pouco, você não lhe mostrou como usar a função Order Select e sua EA não está funcionando melhor agora devido a seu comentário.

Da próxima vez que você quiser ajudar, faça-o da maneira correta, coloque o código certo para que outros possam realmente aprender alguma coisa .

 
Obrigado a todos que postam para minha pergunta. Minha intenção é entrar no comércio quando o bar2 atender a certas condições. Estou testando no GBPJPY e abrindo uma negociação de cada vez, pois sou muito novo na MQL4. Com apenas uma negociação eu posso usar o ticket em Orderclose(). Eu ainda não estou familiarizado com OrderSelect. Portanto, a negociação será fechada se o bar3 atender a certas condições. Gostaria de fazer qualquer pergunta, existe alguma forma de armazenar a execução do programa dentro de um arquivo para fins de depuração? Como descobri que quando o programa é executado, eu não sei qual parte da execução deu errado.
 
chuale:
Obrigado a todos que postam para minha pergunta. Minha intenção é entrar no comércio quando o bar2 atender a certas condições. Estou testando no GBPJPY e abrindo uma negociação de cada vez, pois sou muito novo na MQL4. Com apenas uma negociação eu posso usar o ticket em Orderclose(). Eu ainda não estou familiarizado com OrderSelect. Portanto, a negociação será fechada se o bar3 atender a certas condições. Gostaria de fazer qualquer pergunta, existe alguma forma de armazenar a execução do programa dentro de um arquivo para fins de depuração? Como descobri que quando o programa é executado, eu não sei qual parte da execução deu errado.

Você é bem-vindo Chuale, eu aprendi muito com outros neste fórum também, então não há problema. Você não precisa realmente salvar a execução do programa em um arquivo, existem algumas maneiras de observar seus valores de variáveis e quaisquer erros que possam surgir. Eu uso principalmente a função Comentar() e a função Imprimir (). Posso enviar exemplos a você se você precisar. Como mencionei antes, o GBPJPY não me deu resultados positivos, mas o USDJPY deu. Eu só fiz um back test por um mês (21 de janeiro/2014 - 25 de fevereiro/2015) e com minhas configurações o retorno foi um pouco mais de 400 USD. Vou testar outros pares assim que tiver um pouco de tempo e informá-los. Também se você precisar de ajuda em como usar Print() ou Comment() para ver os valores na tela em tempo real, me avise. A foto anexada anteriormente era seu gráfico de desempenho EA durante um período de um mês. Até agora, não parece estar mal.
 

Caro thedel,

Obrigado

Sim, eu estou usando Print(). Preciso saber como usar OrderSelect( ) se houver mais negócios em aberto. Para uma única operação, se eu usar SELECT_BY_POS, qual será o valor para o índice (OrderSelect (int index, in select, int pool=MODE_TRADES)? É 1?

ou que valor?

 
chuale:
Obrigado a todos que postam para minha pergunta. Minha intenção é entrar no comércio quando o bar2 atender a certas condições. Estou testando no GBPJPY e abrindo uma negociação de cada vez, pois sou muito novo na MQL4. Com apenas uma negociação eu posso usar o ticket em Orderclose(). Eu ainda não estou familiarizado com OrderSelect. Portanto, a negociação será fechada se o bar3 atender a certas condições. Gostaria de fazer qualquer pergunta, existe alguma forma de armazenar a execução do programa dentro de um arquivo para fins de depuração? Como descobri que quando o programa é executado, eu não sei qual parte da execução deu errado.


Aqui está um exemplo de como usar a função Order Select :

Neste exemplo, a função CountTrades verifica todas as ordens abertas e pendentes, descarta as que não têm um símbolo e número mágico correspondente e conta apenas as que precisamos.

Neste exemplo, ele selecionará desde o mais recente até o primeiro.

Se você precisar de mais ajuda com ele, avise-me.

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
/*
On every tick program checks what the value of myTrades is
by calling (executing) the CountTrades() function and asign the value
returned to myTrades..
*/
int myTrades = CountTrades();
/*
Comment() function will display the words in quotes and the value of 
myTrades variable.
*/
Comment("You have "+myTrades+" open trades.");
   
  }
//+------------------------------------------------------------------+
int CountTrades()
{
int count=0;// we start counting from zero
int trade;  // define a variable that will hold the total number of trades that are open
// Get the number of trades from OrdersTotal() and asign that value to trade variable.
for(trade=OrdersTotal()-1;trade>=0;trade--)
   {
   OrderSelect(trade,SELECT_BY_POS,MODE_TRADES); // Select orders by position (OP_BUY and OP_SELL) - orders can be selected by position or by ticket
                                                 // select from Open or pending orders = MODE_TRADES or select from History = MODE_HISTORY
   if(OrderSymbol()!=Symbol() || OrderMagicNumber() != MagicNumber)// if the order has a different symbol or magic number, skip to next order
   continue;
   if(OrderSymbol()==Symbol() && OrderMagicNumber() == MagicNumber)// if symbol is right and magic number is right, that is my order ,then
   if(OrderType()==OP_SELL                                         // if it's an open sell do this.....
   || OrderType()==OP_BUY)                                         // if it's an open buy do this......      
   count++;                                                        // in this example increase the counter since I'm counting all my orders
   }
return(count);                                                     // When finished counting, return the result
}
 
thrdel:


Se você quer dizer que não é a melhor maneira de fechar uma ordem, concordo, mas se o cara não quer usar OrderSelect (ou não sabe como) e não deixa nenhuma ordem em aberto no mercado, ele funciona.

Tentamos nos ajudar aqui e sua resposta não ajudou um pouco, você não lhe mostrou como usar a função Order Select e sua EA não está funcionando melhor agora devido a seu comentário.

Da próxima vez que você quiser ajudar, faça-o da maneira correta, coloque o código certo para que outros possam realmente aprender alguma coisa .


se você tentar ajudar, então explique corretamente

você disse

thrdel:

Primeiro você conta as ordens com OrdersTotal().

total=OrdersTotal();


mau exemplo...... que você deu

se o cara não quer usar OrderSelect() então ele tem que parar de programar as EA's

grandes bobagens o que você diz aqui, https://www.mql5.com/en/forum/149958/page2#915413

eu comentei seu código de exemplo e lhe disse o que você tinha que fazer

há muitos exemplos que eu dei de como fazer ...

procurar no google se você quiser encontrá-los

 
thrdel:


Há algumas coisas que você fez de errado. Presumo que você queira que esta EA trabalhe em pares JPY em M1 no período de tempo. Você quer colocar ordens somente em novos bares e fechar ordens somente em novos bares ou você quer entrar em novos bares e sair se as condições forem atendidas? Eis o que eu penso:

Primeiro você conta as ordens com OrdersTotal().

Em seguida, calcule suas variáveis

Se houver ordens no mercado, verifique se elas têm de ser fechadas

Se não houver ordens no mercado, verifique se as condições de entrada são atendidas.

Informe-me se você tiver alguma dúvida.

 
quando compilado o seguinte: disse que a função Tempo não define. Por favor, informe.
if(Time[0]==previousTime) return(0);         //EA will not go past this point unless it is a new bar
   previousTime=Time[0];                        // If it was a new bar , it's old now but continue to the end
 
chuale:
quando compilado o seguinte: disse que a função Tempo não define. Por favor, informe.


ok, eu o consertei ao digitar errado o parêntese do Tempo, é suposto ser [] em vez de (). Obrigado