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

 
GumRai:

Eu pensaria que você poderia conseguir este código por 20 ou 30 dólares.

Certo... obrigado... Deixe-me ver se primeiro consigo encontrar algo de graça, se eu não encontrar nada, eu vou postar um emprego.
 
GumRai:

Eu pensaria que você poderia conseguir este código por 20 ou 30 dólares.

Na verdade, como agora você CONFIRMA que o fechamento do pedido já considera o spread, eu acho que o script acima deve funcionar para mim ... obrigado ... Tudo o que eu tenho que definir nisso são 10 pips ... e ele irá fechá-lo automaticamente como você diz usando o valor ASK se for um valor curto e usando um valor BID se for um valor longo ... e soma total disso como lucro total da conta e fecha todos os pedidos abertos .. não tocar na ordem pendente, então tudo bem ... graças a uma carga ... também, você poderia me explicar ... no programa acima diz slippage = 5 ... o que significa para este script? como isso vai funcionar quando o script fecha uma ordem? oh e também, é um script ou EA ? ou como diferenciar entre os dois? [ COMO VOCÊS APRENDEM TANTA COISA >.< ]
 
tatyawinchu:

Graças a uma carga... muito clara e muito útil... Pergunto-me quanto custaria postar um trabalho desses? Qual seria a dificuldade de classificar tal código? O código que eu obtive da web e que eu coloquei acima parece ENORME ... Quero dizer, eu realmente não posso gastar milhares de dólares...


Olá novamente,

Não precisa se preocupar, O código para o que você quer não deve ser tão complicado e, só para que você saiba que se alguma vez precisar colocar um emprego, você é quem controla, você oferece o quanto pode pagar e acha que vale a pena!

Por outro lado, se você for como eu, eu tentaria a opção gratuita primeiro. Nada a perder, talvez ganhar alguns amigos e aprender alguma coisa no processo.

Saúde

 
tatyawinchu:

Na verdade, como agora você CONFIRMA que o fechamento do pedido já considera o spread, eu acho que o script acima deve funcionar para mim ... obrigado ... Tudo o que eu tenho que definir nisso são 10 pips ... e ele irá fechá-lo automaticamente como você diz usando o valor ASK se for um valor curto e usando um valor BID se for um valor longo ... e soma total disso como lucro total da conta e fecha todos os pedidos abertos .. não tocar na ordem pendente, então tudo bem ... graças a uma carga ... também, você poderia me explicar ... no programa acima diz slippage = 5 ... o que significa para este script? como isso vai funcionar quando o script fecha uma ordem? oh e também, é um script ou EA ? ou como diferenciar entre os dois? [ COMO VOCÊS APRENDEM TANTA COISA >.< ]


Olá novamente,

Como sempre, há uma boa notícia e uma má notícia. Quer a má notícia primeiro ou a boa notícia?

Aqui está ela e se eu não a explicar bem, por favor, me avise: para que uma EA saia das negociações com base no lucro da conta, ela precisa saber qual era o patrimônio da conta antes que a negociação fosse colocada, para ter um ponto de partida. Faz algum sentido?

Se você não tiver um ponto de partida para comparar ou se não houver comparação, a EA nunca fechará sua negociação enquanto o lucro de sua conta for negativo ou fechará todas as negociações imediatamente se o lucro de sua conta for positivo e acima de 100 ou qualquer que seja o limite.

Isso faz algum sentido?

Slippage é a quantidade máxima de desvio do preço que você permite ao corretor colocar ou fechar a ordem sem recotação se você abrir ou fechar a preço de mercado. Como o Bid and Ask muda continuamente, quando sua ordem chegar ao servidor se o valor do preço (bid or ask) estiver dentro dos limites de slippage, a ordem será processada, caso contrário, será cotada novamente.

Sim, seu código é um EA. Um script normalmente é executado apenas uma vez, você recebe um novo tick, executa o código e sai. Um EA é executado continuamente, desde que você o deixe rodar.

Como distingui-los? Às vezes é difícil, pois eles funcionam de maneira semelhante. Quando um novo script é criado, é assim que parece :

//+------------------------------------------------------------------+
//|                                                   TestScript.mq4 |
//|                             Copyright 2014, 3D@tm Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, 3D@tm Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   
  }
//+------------------------------------------------------------------+

Você pode ver que ele só tem a função OnStart e diz: "Script program start function" (Iniciar programa script).

De volta ao seu problema, se você executar um EA que verifica o patrimônio da conta quando nenhum pedido é feito e toma isso como um ponto de referência, ele pode então fechar todos os pedidos quando o lucro desejado por conta é alcançado.

O valor de um pip (dinheiro por pip ) não é o mesmo para todas as moedas. Um pip no par AUDUSD não é o mesmo valor que no par GBPJPY.

Você está procurando por símbolos específicos para este EA ou não, qual símbolo, apenas para fechar todas as ordens quando o lucro por conta for alcançado?

Além disso, o stop loss deve ser relacionado ao patrimônio líquido da conta ou relacionado à ordem/par ?

Eu sei que parece complicado, mas não é tão complicado assim. Nossos computadores são tão burros que, a menos que você especifique exatamente o que deseja, eles estão perdidos.

Isto foi de alguma ajuda para você? Espero que tenha sido.

Saúde

 

Thrdel

Tenho certeza de que AccountProfit() retorna o lucro total para as negociações abertas atuais. No entanto, não é óbvio a partir da documentação.

 
GumRai:

Thrdel

Tenho certeza de que AccountProfit() retorna o lucro total para as negociações abertas atuais. No entanto, não é óbvio a partir da documentação.


Hmm ...

 AccountProfit() 

Em vez disso, eu uso ...

double AccProfits=AccProfits+OrderProfit();

Depende do que você quer alcançar.

 
GumRai:

Thrdel

Tenho certeza de que AccountProfit() retorna o lucro total para as operações abertas atuais. No entanto, não é óbvio a partir da documentação.


Olá GumRai,

Você está certo, não muito óbvio a partir da documentação, mas eu a testei e novamente, você está certo, é a soma do lucro/perda em todas as ordens abertas.

Boa pegada. Obrigado.

Ainda não é possível usar o Lucro da Conta se apenas quiser administrar pedidos abertos manualmente e precisar selecionar entre outros pedidos que possam ser feitos por outras EA.

Acho que a seleção por número mágico = 0 deve fazer o truque. E então somar os lucros como o deysmacro sugerido.

Acho que vejo as coisas desta maneira. O que vocês acham?

//+------------------------------------------------------------------+
//|                                       CloseOrdersOnProfit_v1.mq4 |
//|                             Copyright 2014, 3D@tm Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, 3D@tm Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//---
#include <stdlib.mqh>
//---
#define  RETRYCOUNT    10
#define  RETRYDELAY    500
#define  LONG          1
#define  SHORT         -1
#define  ALL           0
//---
extern int     Slippage=3;
input  double  ProfitTarget=100.0;
input  double  StopLossLimit=50.0;
input  bool    WriteScreenshots=true;
//---
double StartEquity=0;
int    myOrders;
//===================================================================
/*
This EA will manage manually placed orders and skip the orders that
have a magic number different from zero.
If the Profit target - the sum of profit/loss on all orders (except
orders placed by other EA's ) is reached, all those orders are
closed.
If the maximum amount of money allowed for a loss is reached, EA
will close all those orders and an alert will pop up.
*/
//===================================================================
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   if(Digits==3 || Digits==5) Slippage*=10;
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- count orders manually placed (no magic number)
   CountMyOrders();
//--- reset account equity / take a reference point
   if(myOrders<1)
     {
      StartEquity=AccountEquity();
      //--- no orders detected, wait for orders to be placed
      return;
     }
//--- calculate profit
   double myProfit=CalculateProfit();
//--- if profit target reached, exit all
   if(myProfit>=ProfitTarget)
     {
      ExitAll(ALL);
      Alert("Orders closed due to profit target reached");
     }
//--- exit if stop limit reached
   if(StartEquity-AccountEquity()>=StopLossLimit)
     {
      ExitAll(ALL);
      Alert("Orders closed due to stop loss limit reached");
     }

   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double CalculateProfit()
  {
   double Profit=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)
        {
         Profit=Profit+OrderProfit();
        }
     }
   return(Profit);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void ExitAll(int direction)
  {

   string total=IntegerToString(OrdersTotal(),0,0);

   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      Comment(StringConcatenate("Closing trade #",(i+1)));
      if(OrderSelect(i,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 &&(direction==LONG ||  direction==ALL)) { Exit(OrderSymbol(),OrderTicket(),LONG,OrderLots(),Blue); }
      if(OrderType()==OP_SELL &&(direction==SHORT|| direction==ALL)) { Exit(OrderSymbol(),OrderTicket(),SHORT,OrderLots(),Red); }
     }
   Comment(StringConcatenate(total," trades closed."));
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool Exit(string symb ,int ticket,int dir,double volume,color clr,int t=0)
  {
   int i=0,j=0,cmd=0;
   double prc=0,sl=0,tp=0,lots=0;
   string cmt;
   double bid=MarketInfo(symb,MODE_BID);
   double ask=MarketInfo(symb,MODE_ASK);
   bool closed;

   Print("Exit("+IntegerToString(dir,0,0)+","+DoubleToStr(volume,3)+","+IntegerToString(t,0,0)+")");

   for(i=0; i<RETRYCOUNT; i++) 
     {
      for(j=0;(j<50) && IsTradeContextBusy(); j++)
         Sleep(100);
      RefreshRates();

      if(dir==LONG) 
        {
         prc=bid;
        }
      if(dir==SHORT) 
        {
         prc=ask;
        }
      Print("Exit: prc="+DoubleToStr(prc,Digits));

      closed=OrderClose(ticket,volume,prc,Slippage,clr);
      if(closed)
        {
         Print("Trade closed");
         Screenshot("Exit");

         return (true);
        }

      Print("Exit: error \'"+ErrorDescription(GetLastError())+"\' when exiting with "+DoubleToStr(volume,3)+" @"+DoubleToStr(prc,Digits));
      Sleep(RETRYDELAY);
     }

   Print("Exit: can\'t enter after "+IntegerToString(RETRYCOUNT,0,0)+" retries");
   return (false);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Screenshot(string moment_name)
  {
   if(WriteScreenshots)
      WindowScreenShot(WindowExpertName()+"_"+Symbol()+"_M"+IntegerToString(Period(),0,0)+"_"+
                       IntegerToString(Year(),0,0)+"-"+two_digits(Month())+"-"+two_digits(Day())+"_"+
                       two_digits(Hour())+"-"+two_digits(Minute())+"-"+two_digits(Seconds())+"_"+
                       moment_name+".gif",1024,768);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
string two_digits(int i)
  {
   if(i<10)
      return ("0"+IntegerToString(i,0,0));
   else
      return (""+IntegerToString(i,0,0));
  }
//+------------------------------------------------------------------+
 
thrdel:


Olá GumRai,

Você está certo, não muito óbvio pela documentação, mas eu a testei e novamente, você está certo, é a soma do lucro/perda em todos os pedidos abertos.

Boa pegada. Obrigado.

Ainda não é possível usar o Lucro da Conta se apenas quiser administrar pedidos abertos manualmente e precisar selecionar entre outros pedidos que possam ser feitos por outras EA.

Acho que a seleção por número mágico = 0 deve fazer o truque. E então somar os lucros como o deysmacro sugerido.

Acho que vejo as coisas desta maneira. O que vocês acham?


isto falha .....

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

também não fazem

  if(Digits==3 || Digits==5) Slippage*=10;

se você mudar várias vezes seu cronograma ......

 
deVries:


isto falha .....

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

também não fazem

se você mudar várias vezes seu cronograma ......


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.

 
thrdel:


Olá novamente,

Como sempre, há uma boa notícia e uma má notícia. Quer a má notícia primeiro ou a boa notícia?

Aqui está ela e se eu não a explicar bem, por favor, me avise: para que uma EA saia das negociações com base no lucro da conta, ela precisa saber qual era o patrimônio da conta antes que a negociação fosse colocada, para ter um ponto de partida. Faz algum sentido?

Se você não tiver um ponto de partida para comparar ou se não houver comparação, a EA nunca fechará sua negociação enquanto o lucro de sua conta for negativo ou fechará todas as negociações imediatamente se o lucro de sua conta for positivo e acima de 100 ou qualquer que seja o limite.

Isso faz algum sentido?

Slippage é a quantidade máxima de desvio do preço que você permite ao corretor colocar ou fechar a ordem sem recotação se você abrir ou fechar a preço de mercado. Como o Bid and Ask muda continuamente, quando sua ordem chegar ao servidor se o valor do preço (bid or ask) estiver dentro dos limites de slippage, a ordem será processada, caso contrário, será cotada novamente.

Sim, seu código é um EA. Um script normalmente é executado apenas uma vez, você recebe um novo tick, executa o código e sai. Um EA é executado continuamente, desde que você o deixe rodar.

Como distingui-los? Às vezes é difícil, pois eles funcionam de maneira semelhante. Quando um novo script é criado, é assim que parece :

Você pode ver que ele só tem a função OnStart e diz: "Script program start function" (Iniciar programa script).

De volta ao seu problema, se você executar um EA que verifica o patrimônio da conta quando nenhum pedido é feito e toma isso como um ponto de referência, ele pode então fechar todos os pedidos quando o lucro desejado por conta é alcançado.

O valor de um pip (dinheiro por pip ) não é o mesmo para todas as moedas. Um pip no par AUDUSD não é o mesmo valor que no par GBPJPY.

Você está procurando por símbolos específicos para este EA ou não, qual símbolo, apenas para fechar todas as ordens quando o lucro por conta for alcançado?

Além disso, o stop loss deve ser relacionado ao patrimônio líquido da conta ou relacionado à ordem/par ?

Eu sei que parece complicado, mas não é tão complicado assim. Nossos computadores são tão burros que, a menos que você especifique exatamente o que deseja, eles estão perdidos.

Isto foi de alguma ajuda para você? Espero que tenha sido.

Saúde


thrdel:


Olá novamente,

Como sempre, há uma boa notícia e uma má notícia. Quer a má notícia primeiro ou a boa notícia?

Aqui está ela e se eu não a explicar bem, por favor, me avise: para que uma EA saia das negociações com base no lucro da conta, ela precisa saber qual era o patrimônio da conta antes que a negociação fosse colocada, para ter um ponto de partida. Faz algum sentido?

Se você não tiver um ponto de partida para comparar ou se não houver comparação, a EA nunca fechará sua negociação enquanto o lucro de sua conta for negativo ou fechará todas as negociações imediatamente se o lucro de sua conta for positivo e acima de 100 ou qualquer que seja o limite.

Isso faz algum sentido?

Slippage é a quantidade máxima de desvio do preço que você permite ao corretor colocar ou fechar a ordem sem recotação se você abrir ou fechar a preço de mercado. Como o Bid and Ask muda continuamente, quando sua ordem chegar ao servidor se o valor do preço (bid or ask) estiver dentro dos limites de slippage, a ordem será processada, caso contrário, será cotada novamente.

Sim, seu código é um EA. Um script normalmente é executado apenas uma vez, você recebe um novo tick, executa o código e sai. Um EA é executado continuamente, desde que você o deixe rodar.

Como distingui-los? Às vezes é difícil, pois eles funcionam de maneira semelhante. Quando um novo script é criado, é assim que parece :

Você pode ver que ele só tem a função OnStart e diz: "Script program start function" (Iniciar programa script).

De volta ao seu problema, se você executar um EA que verifica o patrimônio da conta quando nenhum pedido é feito e toma isso como um ponto de referência, ele pode então fechar todos os pedidos quando o lucro desejado por conta é alcançado.

O valor de um pip (dinheiro por pip ) não é o mesmo para todas as moedas. Um pip no par AUDUSD não é o mesmo valor que no par GBPJPY.

Você está procurando por símbolos específicos para este EA ou não, qual símbolo, apenas para fechar todas as ordens quando o lucro por conta for alcançado?

Além disso, o stop loss deve ser relacionado ao patrimônio líquido da conta ou relacionado à ordem/par ?

Eu sei que parece complicado, mas não é tão complicado assim. Nossos computadores são tão burros que, a menos que você especifique exatamente o que deseja, eles estão perdidos.

Isto foi de alguma ajuda para você? Espero que tenha sido.

Saúde

Olá novamente

Obrigado por uma resposta muito clara... e obrigado por ser muito útil... Agora eu entendo muito o que você ensinou...

"Você está procurando por símbolos específicos para esta EA ou não, qual símbolo, apenas para fechar todos os pedidos quando o lucro por conta é alcançado?" = segunda metade com algumas condições é a exigência

"apenas para fechar todos os pedidos quando o lucro por conta for alcançado"

Ok, eu troco apenas 2 pares de uma vez ... Primeiro abro um pedido em um par ... se ele vai contra mim, eu o sebro com o pedido em outro par ...

Procuro a EA que faz as seguintes coisas:

1) NÃO FAÇA se não houver ordem ou se houver apenas UMA ordem

2) Deve FECHAR em X lucro SOMENTE se houver DOIS pedidos em execução, caso contrário vá para 1)

3) Ao fechar X, deve considerar spread a ser pago e considerar X como lucro líquido [ isto já foi explicado acima que AccountProfit() nega diretamente o spread que você tem que pagar e mostra a você lucro líquido e não bruto ... correto se errado ]

4) Como você pode ver, SL e TP não são preocupações, eu não uso esses não são necessários na EA

Agora, eu estou totalmente com vocês em relação às coisas gratuitas, e embora eu não saiba codificar, eu acho que mais da metade do que eu preciso já está lá em cima na EA ... Eu só tenho que encontrar algo para mudar que ele só faz o que faz quando duas ordens estão abertas ... Eu acho que ele tem que fazer algo com aquele PARA loop lá ... ou algo assim ... =D [ Ok, agora eu estou com inveja que vocês podem ler código e eu não posso!! ... agora eu me sinto como um cara burro do século 20! ahahha no século 21 todos devem saber codificar >.< ]

Fiz um fluxograma rápido de minhas necessidades

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