Por favor, me oriente quanto à propagação - página 4

 
deysmacro:
Mas é preciso lembrar. A EA fecha apenas os negócios em andamento. Você mesmo tem que abrir o comércio.

100%, sem problemas, é exatamente isso que estou tentando conseguir... não quero que a EA abra qualquer negócio, é o MEU trabalho... Só quero que ela feche se mais de 2 pedidos forem abertos com X de lucro e devo considerar a possibilidade de spread! Lentamente estou me aproximando ... esta coisa de programação deveria ter sido ensinada nas escolas ... é pena que eu seja dos anos 80, nunca pensei que teria que passar por isso, mas mais eu li o arquivo de ajuda, acho cada vez mais intrigante ... também, este fórum tem muita ajuda, graças a caras como você.
 
tatyawinchu:

E se eu puder adicionar um laço IF e depois colar o resto do código abaixo do qual inicia o laço?

A condição IF deve verificar a ordemTotal a ser => 2 para que o controle seja passado para fechar todas as ordens abertas com X lucro após o spread?



Não tenho certeza do que você realmente quer dizer com "A condição IF deve verificar o OrderTotal a ser => 2 para que o controle seja passado para fechar todas as ordens abertas com X de lucro após o spread".

mas tenho certeza de que nada de muito ruim acontecerá se você tentar. E se não funcionar, não há nada a perder. Pelo menos você tentou.

 
tatyawinchu:

100%, sem problemas, é exatamente isso que estou tentando conseguir... não quero que a EA abra qualquer negócio, é o MEU trabalho... Só quero que ela feche se mais de 2 pedidos forem abertos com X de lucro e devo considerar a possibilidade de spread! Lentamente estou me aproximando ... esta coisa de programação deveria ter sido ensinada nas escolas ... é pena que eu seja dos anos 80, nunca pensei que teria que passar por isso, mas mais eu li o arquivo de ajuda, acho cada vez mais intrigante ... também, este fórum tem muita ajuda, graças a caras como você.

Basta incluir a dispersão no lucro total.
 
thrdel:


Eu não tenho certeza do que você realmente quer dizer com "A condição IF deve verificar a ordemTotal a ser => 2 para que o controle seja passado para fechar todas as ordens abertas com X lucro após o spread".

mas tenho certeza de que nada de muito ruim acontecerá se você tentar. E se não funcionar, não há nada a perder. Pelo menos você tentou.


Não tenho certeza do que você realmente quer dizer com "A condição IF deve verificar a ordemTotal a ser => 2 para que o controle seja passado para fechar todas as ordens abertas com X lucro após o spread".

Hmm... Ok, o que eu quero dizer com isso é

SE ... o número total de ordens abertas for maior ou igual a 2 ... só então vá em frente e siga o resto do código...

SE o número total de ordens abertas ... [ OrdensTotal() ?? ] ... for inferior a 2 ... isso significa que é 1 ou 0, então não faça nada ...

Agora, aqui está um problema para mim, aquele arquivo de ajuda mql 4 diz OrdersTotal() conta todas as ordens, mercado E pendentes ... Estou tentando procurar alguma função que possa obter apenas ordens de mercado ao vivo, não ordens pendentes, OU, pode ser calculado matematicamente, pois na maioria das vezes eu só tenho no máximo 2 ordens em execução de qualquer maneira.

Esta explicação é mais clara?

tx para o tempo que você está me dando homem.

 

thrdel quer que você tente primeiro e veja o que acontece, embora eu esteja bastante seguro do que provavelmente aconteceria.

 
deysmacro:

thrdel quer que você tente primeiro e veja o que acontece.



sim, passando pelo arquivo de ajuda para encontrar a função adequada que dá apenas ordens em aberto.
 
Mostre-nos seu código quando você conseguir completá-lo e nós o ajudaremos se pudermos.
 
deysmacro:
Mostre-nos seu código quando você conseguir completá-lo e nós o ajudaremos se pudermos.

Entendido! Obrigado a todos...

..

... e eu não consegui encontrar uma função que só retorna negócios em aberto ... Tudo bem, então eu adicionei o laço IF como abaixo...

//+------------------------------------------------------------------+
//|                    CloseTrades_After_Account_Profit_Reached.mq4  |
//|                                     Copyright © 2007, Tradinator |
//|                                          tradinator.fx@gmail.com |
//+------------------------------------------------------------------+

#property copyright "Copyright © 2007, Tradinator"
#property link      "tradinator.fx@gmail.com"


                                       
extern double My_Money_Profit_Target=100;     //The amount of money profit at which you want to close ALL open trades.
extern string Profit_Target= "Enter above To Close all OPEN trades when amount of profit is Reached in Account and not per OPEN trade! ";
                                          
int Slippage=5;
int i;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//---- 
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+


int start()

//+------------------------------------------------------------------+
//| This is just the single line of code that I have added
//+------------------------------------------------------------------+
{ 
 if (OrdersTotal()>=2)

 {
   if (AccountProfit()>= My_Money_Profit_Target)
   {
    for(i=OrdersTotal()-1;i>=0;i--)
       {
       OrderSelect(i, SELECT_BY_POS);
       int type   = OrderType();
               
       bool result = false;
              
       switch(type)
          {
          //Close opened long positions
          case OP_BUY  : result = OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),Slippage,Pink);
                         break;
               
          //Close opened short positions
          case OP_SELL : result = OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),Slippage,Pink);
                          
          }
          
       if(result == false)
          {
            Sleep(0);
          }  
       }
      Print ("Account Profit Reached. All Open Trades Have Been Closed");
      return(0);
   }  
   
   Comment("Balance: ",AccountBalance(),", Account Equity: ",AccountEquity(),", Account Profit: ",AccountProfit(),
           "\nMy Account Profit Target: ",My_Money_Profit_Target);
   
  return(0);
   }
 }

Adicionei a condição IF no início que vai se (OrdersTotal()>=2) ... [ Destacado no código acima com comentário ]

Agora, havia um problema para fechar o {} como na primeira tentativa eu o tentei como

{ 
 if (OrdersTotal()>=2)
}

 {
   if (AccountProfit()>= My_Money_Profit_Target)
   {
    for(i=OrdersTotal()-1;i>=0;i--)
       { .. etc etc 
     

Então, basicamente como um codificador pela primeira vez, tentei colocar que se a condição a ser verificada PRIMEIRO ... não compilasse ...

Então eu fechei o {}, colocando a condição dentro... agora ele compilou com apenas 2 avisos e sem erros...

valor de retorno de 'OrderSelect' deve ser verificado Testcode 1.mq4 56 8

nem todos os caminhos de controle retornam um valor Testcode 1.mq4 86 2

Então ele compila ... é logicamente correto?

[Também, não removendo nenhuma informação sobre direitos autorais, estou apenas adicionando uma linha, remover seus detalhes seria totalmente injusto de minha parte ... qual é a regra a respeito disso? ]

 
tatyawinchu:

Sim, passando por um arquivo de ajuda para encontrar a função adequada que dá apenas ordens em aberto.


Realmente sinto muito, homem, como eu disse antes, não sou muito bom em explicar . Eu entendo que você quer encontrar uma função que conte apenas ordens abertas de compra ou venda, eu pedi que você olhasse meu código, expliquei-o o melhor que pude e não era tão bom quanto eu esperava.

Você se lembra do primeiro passo que mencionei sobre esse código?

Foi : CondeMyOrders. Agora, se você olhasse o código como eu lhe perguntei, eis o que você encontraria

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double CountMyOrders()
  {
   myOrders=0;
   for(int cnt=OrdersTotal()-1;cnt>=0;cnt--)
     {
      if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)==false)
         Print("Failed to select order, error : "+ErrorDescription(GetLastError()));
      //skip orders placed by other EA's
      if(OrderMagicNumber()>0)continue;
      if(OrderType()==OP_BUY || OrderType()==OP_SELL)
        {
         myOrders++;
        }
     }
   return(myOrders);
  }

Diz :

if(OrderType()==OP_BUY || OrderType()==OP_SELL)

Você deve saber o que significa OP_BUY e OP_SELL.

Nenhuma contagem de ordens pendentes, nenhuma parada de compra aberta, nenhuma parada de venda aberta, nenhum limite de compra ou venda, apenas compra aberta e venda aberta.

De que outra forma posso explicar melhor esse código e o que ele faz?

Você pode continuar pesquisando a documentação e se familiarizar com ela, mas posso lhe dizer que a função que você está procurando não está lá.

Meu EA diz que se ainda não houver pedidos, espere :

if(myOrders<1)

Você quer esperar por 2 ordens. Se você prestasse um pouco de atenção ao que eu disse, você provavelmente notaria que tudo o que precisa fazer é :

if(myOrders<2)

Voilla. Agora ela espera que as 2 ordens estejam em vigor - sem pendentes, compre ou venda somente!

Por favor, entenda que eu tentei juntar o código para atender também a outros que poderiam estar procurando uma maneira de administrar negócios abertos e não tanto um costume projetado para um propósito específico.

Ele pretende ser um exemplo, pegue o que você acha bom, deixe o resto de fora, melhore, mude-o, aprenda com ele se você puder e experimente com ele.

Espero que faça sentido.

 
thrdel:


Realmente sinto muito, homem, como eu disse antes, não sou muito bom em explicar . Eu entendo que você quer encontrar uma função que conte apenas ordens de compra ou venda abertas, eu pedi que você olhasse meu código, expliquei-o com o melhor das minhas habilidades e não era tão bom quanto eu esperava.

Você se lembra do primeiro passo que mencionei sobre esse código?

Foi : CondeMyOrders. Agora, se você olhasse o código como eu lhe perguntei, eis o que você encontraria

Diz :

Você deve saber o que significa OP_BUY e OP_SELL.

Nenhuma contagem de ordens pendentes, nenhuma parada de compra aberta, nenhuma parada de venda aberta, nenhum limite de compra ou venda, apenas compra aberta e venda aberta.

De que outra forma posso explicar melhor esse código e o que ele faz?

Você pode continuar pesquisando a documentação e se familiarizar com ela, mas posso lhe dizer que a função que você está procurando não está lá.

Meu EA diz que se ainda não houver pedidos, espere :

Você quer esperar por 2 ordens. Se você prestasse um pouco de atenção ao que eu disse, você provavelmente notaria que tudo o que precisa fazer é :

Voilla. Agora ela espera que as 2 ordens estejam em vigor - sem pendentes, compre ou venda somente!

Por favor, entenda que eu tentei juntar o código para atender também a outros que poderiam estar procurando uma maneira de administrar negócios abertos e não tanto um costume projetado para um propósito específico.

Ele pretende ser um exemplo, pegue o que você acha bom, deixe o resto de fora, melhore, mude-o, aprenda com ele se você puder e experimente com ele.

Espero que faça sentido.

Obrigado a muitos ... Primeiro, não é você! é tudo eu! hehe eu sou o novato aqui ... suas explicações são perfeitas! apenas pouco difícil de digerir neste momento, pois vou passo a passo ... palavra por palavra através de arquivos de ajuda =) e pedindo ajuda enquanto fico preso ... Ao invés disso, agora por causa do seu código, estou lendo a seção FUNÇÃO no arquivo de ajuda! ! Além disso, você poderia compilar o código que colei acima em seu final e ver se há algo de errado com a lógica dessa condição SE? Vamos omitir agora mesmo que conta todas as ordens... digamos que se esta EA é executada quando nenhuma ordem foi aberta, então a primeira ordem foi aberta e algum tempo depois outra ordem é acionada... o fluxo lógico dessa condição IF está correto? Além disso, agora estou quase certo de que este código só precisa de uma linha de correção ou tal[Também, abandonei a idéia de lançar isto como um trabalho...], eu não tenho que complicar para verificar se omitir ou não ordens de outros EA porque para mim este será o único EA em execução, então eu não tenho que atribuir especificamente um número mágico a cada ordem etc... agora eu só preciso descobrir se a lógica do meu IF está correta ^^
Razão: