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

 
EA starts 
---> Does nothing till there is 0 or 1 order 
----> Makes a 'call open sound' when 2nd order gets triggered 
----> Closes both orders at X amount of pure profit [after considering spread] and makes a 'call close sound' ]

of course, call open and call close sound files can be any small wave files.. easily available on mt4 itself. .. 
I think these things can be achieved in the above EA that I had posted by changing a few things !
Uau ... o que você quer é basicamente muito fácil de codificar.
 
deysmacro:
Uau ... o que você quer é basicamente muito fácil de codificar.


Você pode me guiar até ele? Eu já tenho isso na web.

//+------------------------------------------------------------------+
//|                    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()
{
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);
}

Agora, deixei bem claro que não sou codificador, mas acho que preciso de alguma linha abaixo de "int start()" que conta o número de ordens EXECUTAS [não pendentes] e depois passa para o próximo código somente se forem 2 e executa o resto do código. ..se (AccountProfit()>= My_Money_Profit_Target)... etc

certo? Como dizer tal linha em MQL ?

int start()
{
 {
   if (Ordertotal()<=1)  ------>   See , something here which says only execute lower code if total executed orders are two else dont go to lower code.. I know that syntax is totally busted, trying to push the concept                                                                                                             
                                   as a weak non coder mind ;( .. so till total open orders are less than or equal to 1 means not 2, the code below that line wont come into play !         

      if (AccountProfit()>= My_Money_Profit_Target)
   {
    for(i=OrdersTotal()-1;i>=0;i--)
       {
       OrderSelect(i, SELECT_BY_POS);
 
thrdel:

Sim, deVries,

tudo falha e eu não deveria fazer isso se você o diz, mas como realmente não vejo muita ajuda em você responder .....

Você entende que o código não é um EA comercial destinado à venda para um cliente exigente, certo? Estamos tentando resolver algo e se você não quer ajudar, pelo menos deixe isso em paz.

Você realmente acha que se eu mudar o prazo várias vezes..... o quê? O Slippage será de 3000000 ? Não no meu MT4, aparentemente. E se você não acredita em mim, faça você mesmo um teste.

Meu teste diz que quando você muda os prazos, a EA passa pelo ciclo deinit/init e como o código mencionado está no OnInit, o Slippage estará sempre em 30 pontos.

Como qualquer pessoa pode ver, a mudança dos prazos não levará o Slippage a um milhão, se é isso que você está sugerindo.

E não, não é uma imagem falsa, é real, você pode verificar o tempo de troca de cada período de tempo.

Espero que ajude.


isto falha .....

para muitos negócios prc não é o preço certo

o que você tem a dizer sobre isso...

leia Chamadas duplas para OnInit() e OnDeinit()

há problemas com as novas versões

(A dupla edição OnInit() parece estar fixada no build 628 mas ainda não tem esta versão )

 
deVries:

isto falha .....

para muitos negócios prc não é o preço certo

o que você tem a dizer sobre isso...

hehehe, agora vocês dois entraram no fundo da toca do coelho e estão discutindo algo que está fazendo as aves voarem sobre minha cabeça! xD ... você poderia, por favor, olhar para aquela linha de código coxo que eu acrescentei? =D

 
tatyawinchu:

hehehe, agora vocês dois entraram fundo na toca do coelho e estão discutindo algo que está fazendo as aves voarem sobre minha cabeça! xD ... você poderia, por favor, olhar para aquela linha de código coxo que eu acrescentei? =D


Ask and Bid corretos são os preços de chartSymbol se o comércio é outro Symbol preço de fechamento está errado

       if(result == false)
          {
            Sleep(0);
          }  

que efeito isso terá ??

está falhando???? OrderType está pendente de negociação ???

ou o fechamento está falhando

caso você precise obter o último erro GetLastError() sabendo o motivo

 
tatyawinchu:

EA começa ---> Não faz nada até haver 0 ou 1 pedido ----> Faz um 'som de chamada aberta' quando o 2º pedido é acionado ----> Fecha ambos os pedidos com X quantidade de lucro puro [após considerar spread] e faz um 'som de chamada fechada' ]

é claro, os arquivos de som aberto e fechado podem ser quaisquer arquivos de ondas pequenas... facilmente disponíveis no próprio mt4. ... Eu acho que estas coisas podem ser alcançadas na EA acima que eu tinha postado mudando algumas coisas ! hehehehe me ajuda plz =D

Olá tatyawinchu,

Acredito que você não entendeu bem o que a EA postada faz. Deixe-me acompanhá-lo passo a passo e você decide se é algo que você pode ou não usar para seu propósito.

O stop loss baseado em conta está lá para proteger qualquer um que queira usá-lo e eu nunca recomendaria estar no mercado sem pelo menos uma parada de emergência, se você tiver 10 000 em sua conta e quiser arriscar tudo, basta definir o StopLossLimit para 10 000.

Sua decisão.

Agora, voltando ao código, é tão fácil quanto 1, 2, 3 :

1. Se você ler o código na função OnTick - esta é a parte que é executada em cada tick - você verá a primeira coisa que ele faz é : CountMyOrders. Espero que você veja isso. Em seguida, se myOrders <1 significa que ainda não há ordens, verifique o patrimônio da conta, lembre-se dele e que ele.

Não faz mais nada. A seguir, se ainda não houver ordens, volte a esperar. Bastante chato ser um EA, não é mesmo?

2.Quando uma ordem é colocada myOrders<1 não é mais verdadeira no próximo tick, ela saltará para a próxima linha e calculará o lucro para a ordem ou ordens que estão no mercado.

3.Em seguida, ele comparará a soma de todos os lucros da ordem com o lucro alvo.

Fácil, não é? Se o lucro atingir o objetivo, a próxima linha diz : ExitAll . E vai aparecer um alerta (com som) na tela dizendo que as ordens atingiram seu objetivo!

Não foi tão ruim assim, não é?

E esqueci de mencionar, se o mercado for contra você e a perda de capital atingir o nível pré-estabelecido, ele o levará para fora do mercado para proteger qualquer capital que reste.

E essa é a melhor ajuda que eu poderia lhe dar.

Se você precisa mais do que isso, provavelmente é um trabalho para os caras que fazem mais código personalizado do que isso.

Espero que ajude.

Saúde

 
thrdel:

Olá tatyawinchu,

Acredito que você não entendeu bem o que a EA postada faz. Deixe-me acompanhá-lo passo a passo e você decide se é algo que você pode ou não usar para seu propósito.

O stop loss baseado em conta está lá para proteger qualquer um que queira usá-lo e eu nunca recomendaria estar no mercado sem pelo menos uma parada de emergência, se você tiver 10 000 em sua conta e quiser arriscar tudo, basta definir o StopLossLimit para 10 000.

Sua decisão.

Agora, voltando ao código, é tão fácil quanto 1, 2, 3 :

1. Se você ler o código na função OnTick - esta é a parte que é executada em cada tick - você verá a primeira coisa que ele faz é : CountMyOrders. Espero que você veja isso. Em seguida, se myOrders <1 significa que ainda não há ordens, verifique o patrimônio da conta, lembre-se dele e que ele.

Não faz mais nada. A seguir, se ainda não houver ordens, volte a esperar. Bastante chato ser um EA, não é mesmo?

2.Quando uma ordem é colocada myOrders<1 não é mais verdadeira no próximo tick, ela saltará para a próxima linha e calculará o lucro para a ordem ou ordens que estão no mercado.

3.Em seguida, ele comparará a soma de todos os lucros da ordem com o lucro alvo.

Fácil, não é? Se o lucro atingir o objetivo, a próxima linha diz : ExitAll . E vai aparecer um alerta (com som) na tela dizendo que as ordens atingiram seu objetivo!

Não foi tão ruim assim, não é?

E esqueci de mencionar, se o mercado for contra você e a perda de capital atingir o nível pré-estabelecido, ele o levará para fora do mercado para proteger qualquer capital que reste.

E essa é a melhor ajuda que eu poderia lhe dar.

Se você precisa mais do que isso, provavelmente é um trabalho para os caras que fazem mais código personalizado do que isso.

Espero que ajude.

Saúde


Hmm... parece que estamos à deriva...

Minha exigência exata é a seguinte:-

Passo1 EA inicia .

A etapa 2 EA verifica o lucro da conta corrente para que saiba o ponto de partida a partir do qual calcular.

Etapa 3 A EA verifica a execução de ordens abertas [não pendentes].

O passo 4 EA não faz nada se não houver ordem de execução OU se houver apenas UMA ordem de execução.

Passo 5 EA faz um som quando a segunda ordem é acionada... Esta segunda ordem estará em algum outro par.

Passo 6 O EA fecha AMBOS as ordens com X de lucro após levar em consideração o SPREAD e faz um som.... aqui AMBOS deve ser TODAS as ordens abertas ... não precisa apagar as ordens pendentes

O que a EA não precisa ... SL ou TP de qualquer tipo...

De preferência, a EA deve trabalhar com mais de dois pedidos, mas não é necessária se for muito difícil.

[ Embora logicamente eu sinta que não será difícil, muito fácil, porque a EA ativa para fechar TODAS as ordens abertas se elas forem MAIS DE 1 ... isso é 2 ou MAIS automaticamente! para que isso já possa ser coberto pela EA... me corrija se estiver errado!]

 
deysmacro:
Uau ... o que você quer é basicamente muito fácil de codificar.

Você é engraçado. Sutil, mas engraçado.
 
thrdel:

Você é engraçado. Sutil, mas engraçado.

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?

Como dizer à EA para fazer anotações em certos casos?

Digamos que eu faço o seguinte

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+


int start() 
{
if (OrdersTotal()=>2)                                     // Can this work? Can a function be directly called like this?
} 
{
 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)
Ok, cant seem to get out of this box yet ! hehe need to know forum stuff more ! but, as you can see above, if that "if (OrdersTotal()=>2)" is valid, it would directly solve my problems .. because the rest of
the stuff would be executed only if the total running market orders are 2 ! =D ..  and some forum guru please release this text from this src prison box ! ;)
 
Mas é preciso lembrar. A EA fecha apenas os negócios em andamento. Você mesmo tem que abrir o comércio.
Razão: