Discussão do artigo "Construtor de estratégia visual. Criação de robôs de negociação sem programação" - página 5

 
Реter Konow:

1. Já está. Com a rolagem, assim como com a alça de arrastar da janela. Você precisa pressionar uma vez e depois novamente e segurar. Então, tudo funciona.

5. Se uma janela tiver saído do escopo, você precisará usar a barra de rolagem principal. Em seguida, ela poderá ser trazida de volta à área de visibilidade.

Obrigado pelos comentários!

1) Você só precisa pressionar (1 vez sem soltar), segurar e arrastar. Não uma vez, mas de novo e de novo e de novo :)

5) Você também pode mover o esquema pela parte inferior. A camada principal também pode ser movida como um mapa, sem barras de rolagem. Você precisa "agarrar" um espaço vazio e movê-lo.

Sim, eu intencionalmente não dei dicas sobre redimensionamento etc. Eu me lembro do que e onde desde a primeira vez, e então elas sempre incomodam meus olhos, mesmo que não sejam necessárias.

 
Andrey Barinov:

Obrigado pelos comentários!

1) Você só precisa pressionar (1 vez sem soltar), segurar e arrastar. Não uma vez, mas de novo e de novo e de novo :)

5) Você também pode mover o esquema pela parte inferior. A camada principal também pode ser movida como um mapa, sem barras de rolagem. Você precisa "agarrar" um espaço vazio e movê-lo.

Sim, eu intencionalmente não dei dicas sobre redimensionamento etc. Você se lembra do que e onde desde a primeira vez, e então elas sempre incomodam seus olhos, embora não sejam necessárias.

Entendi. Muito obrigado. Realmente muito conveniente. Mas ainda não consigo ir muito longe com o primeiro controle. Nem a janela, nem a rolagem. Mas se eu pressionar novamente, tudo funcionará.

Não sei o motivo.

 
Pessoalmente, minha opinião subjetiva é que sou contra esses programas. A MQL é uma linguagem muito flexível e poderosa. Ela pode ser usada para implementar absolutamente tudo, qualquer "perversão" que venha à cabeça do trader. No programa, tudo é implementado dentro de certos limites, que foram inicialmente definidos pelo autor do programa. Sim, é possível criar um robô, sim, ele pode funcionar. Mas eu posso fazer isso no MetaEditore e também de graça.
 
Não sei o que é mais fácil de aprender: MQL ou esse construtor....
[Excluído]  
Apenas por diversão. O Forex não é uma área em que esses aplicativos sejam muito procurados
 
Aleksey Vyazmikin:

A ideia é boa, parece interessante, mas a EA pronta já está um pouco inclinada - ela exige a capacidade de construir com a rolagem para baixo ou para os lados.

Essa interface é necessária para o ME - escreva em um código quadrado e conecte-se, o que é conveniente, especialmente se você puder criar seus próprios ícones e salvá-los como um espaço em branco - pense no MQ.

No entanto, estou confuso, não há código no final do artigo e no próprio artigo, o que significa que é um anúncio do produto. Agora é possível escrever artigos sobre seu produto e publicá-los, ou isso é um acordo de bastidores para alguns poucos?

Há muito tempo é possível escrever artigos sobre seu produto. Outro aspecto é que a MQ pode não permitir a publicação de todos os artigos. Somente aqueles que eles consideram dignos de publicação.

O autor do artigo criou um ótimo produto. Mas ele precisa ser aprimorado. É desejável usar a roda do mouse nas listas da direita e da esquerda. Para percorrer essas listas.

É possível sentir o grande potencial desse desenvolvimento.


====

O que é ruim. Depois de desinstalar esse utilitário (Expert Advisor), o esquema de cores da janela com o gráfico é alterado. Antes de instalar o utilitário, o esquema de cores era o mesmo. Após a instalação, o esquema de cores muda. Isso é uma desvantagem.

É necessário retornar ao esquema de cores que existia antes da instalação do utilitário ao remover o utilitário do gráfico. É melhor não alterar o esquema de cores de forma alguma. Todas as manipulações devem ser feitas em uma janela adicional formada na parte superior do gráfico. É assim que faço quando estou criando padrões graficamente. Uma janela é criada na parte superior do gráfico, onde tudo é desenhado. Depois de excluir essa janela, não há necessidade de corrigir algo no gráfico. Tudo o que é criado na janela é salvo em arquivos.

 
Andrey Barinov:

A classe trade é implementada como uma classe estática e pode ser usada separadamente do restante do código.

Observei com interesse a classe de negociação no código-fonte gerado (MQL5 >600Kb, EX5 > 250Kb).

class cTrade final
  {
   //====================
private:
   //====================
   //===============
   //===============
   void              cTrade(void){}
   virtual void     ~cTrade(void){}
   //===============
   //===============
   static void       AddCurrentTrades(const cTradesFilter &filter,long &tickets[]);
   static void       AddCurrentOrders(const cPendingOrdersFilter &filter,long &tickets[]);
   static void       AddHistoryTrades(const cTradesFilter &filter,long &tickets[]);
   static void       AddHistoryOrders(const cPendingOrdersFilter &filter,long &tickets[]);
   //===============
   //===============
   static double     CheckLot(const string symbol,const double lots);
   static bool       CheckPlaced(const string symbol,const eTradeType type,const long magic);
   static bool       CheckMargin(const string symbol,const double volume,const eTradeType type,const double price);
   static bool       CheckOrderPrice(const string symbol,const ePendingOrderType type,const double price);
   static bool       CheckStops(const string symbol,const eTradeType type,const bool istrade,const double entrylevel,
                                const double stoploss,const double takeprofit);
   //===============
   //===============
   static int        GetMatch(const cTradeInfo &trades[],const int forindex,const long &matched[]);
   static void       TradesCloseBy(const long &tickets[],const bool slippageenabled,const long slippage,const ENUM_ORDER_TYPE_FILLING filling);
   //===============
   //===============
   static void       ModifyTrade(const long ticket,const double newsl,const double newtp);
   static void       ModifyPendingOrder(const long ticket,const double newprice,const double newsl,const double newtp,const datetime newexpiration);
   //===============
   //===============
   static void       CloseBy(const long ticket1,const long ticket2,const ENUM_ORDER_TYPE_FILLING filling);
   //===============
   //===============
   static void       BreakEven(const long ticket,const long belevel,const long beprofit);
   static void       TrailingStop(const long ticket,const long tslstart,const long tsldistance,const bool tsllevelenabled,const double tsllevel);
   //===============
   //===============
   static void       CalculateSLandTP(const string symbol,const eTradeType type,const double entrylevel,const double lots,
                                      const bool slpointsenabled,const long slpoints,const bool tppointsenabled,const long tppoints,
                                      const bool slmoneyenabled,const double slmoney,const bool tpmoneyenabled,const double tpmoney,
                                      const bool slpriceenabled,const double slprice,const bool tppriceenabled,const double tpprice,
                                      double &sllevel,double &tplevel);
   //===============
   //===============
   static bool       CanTrade(void);
   //===============
   //===============
   //====================
public:
   //====================
   //===============
   //===============
   static long       ProfitPointsGet(const eTradeType type,const double openprice,const double closeprice,const string symbol);
   static double     CommissionGet(const long positionID);
   //===============
   //===============
   static void       GetFilteredTradesTickets(const cTradesFilter &filter,long &tickets[]);
   static void       GetFilteredPendingOrdersTickets(const cPendingOrdersFilter &filter,long &tickets[]);
   //===============
   //===============
   static double     GetLot(const string symbol,const long slpoints,const double moneyrisk);
   //===============
   //===============
   static void       OpenTrade(const string symbol,const eTradeType type,const double lots,const long magic,const string comment,
                               const bool slpointsenabled,const long slpoints,const bool tppointsenabled,const long tppoints,
                               const bool slmoneyenabled,const double slmoney,const bool tpmoneyenabled,const double tpmoney,
                               const bool slpriceenabled,const double slprice,const bool tppriceenabled,const double tpprice,
                               const bool slippageenabled,const long slippage,
                               const ENUM_ORDER_TYPE_FILLING filling);
   static void       PlacePendingOrder(const string symbol,const double price,const ePendingOrderType type,const double lots,
                                       const long magic,const string comment,
                                       const bool slpointsenabled,const long slpoints,const bool tppointsenabled,const long tppoints,
                                       const bool slmoneyenabled,const double slmoney,const bool tpmoneyenabled,const double tpmoney,
                                       const bool slpriceenabled,const double slprice,const bool tppriceenabled,const double tpprice,
                                       const bool expirationenabled,const datetime expiration,
                                       const ENUM_ORDER_TYPE_FILLING filling);
   //===============
   //===============
   static void       ModifyTrade(const long ticket,const bool tightenstopsonly,
                                 const bool slpointsenabled,const long slpoints,const bool tppointsenabled,const long tppoints,
                                 const bool slmoneyenabled,const double slmoney,const bool tpmoneyenabled,const double tpmoney,
                                 const bool slpriceenabled,const double slprice,const bool tppriceenabled,const double tpprice);
   static void       ModifyTrades(const long &tickets[],const bool tightenstopsonly,
                                  const bool slpointsenabled,const long slpoints,const bool tppointsenabled,const long tppoints,
                                  const bool slmoneyenabled,const double slmoney,const bool tpmoneyenabled,const double tpmoney,
                                  const bool slpriceenabled,const double slprice,const bool tppriceenabled,const double tpprice);
   //===============
   //===============
   static void       ModifyPendingOrder(const long ticket,const bool priceenabled,const double price,const bool tightenstopsonly,
                                        const bool slpointsenabled,const long slpoints,const bool tppointsenabled,const long tppoints,
                                        const bool slmoneyenabled,const double slmoney,const bool tpmoneyenabled,const double tpmoney,
                                        const bool slpriceenabled,const double slprice,const bool tppriceenabled,const double tpprice,
                                        const bool expirationenabled,const datetime expiration);
   static void       ModifyPendingOrders(const long &tickets[],const bool priceenabled,const double price,const bool tightenstopsonly,
                                         const bool slpointsenabled,const long slpoints,const bool tppointsenabled,const long tppoints,
                                         const bool slmoneyenabled,const double slmoney,const bool tpmoneyenabled,const double tpmoney,
                                         const bool slpriceenabled,const double slprice,const bool tppriceenabled,const double tpprice,
                                         const bool expirationenabled,const datetime expiration);
   //===============
   //===============
   static void       CloseTrade(const long ticket,
                                const bool slippageenabled,const long slippage,
                                const ENUM_ORDER_TYPE_FILLING filling);
   static void       CloseTrades(const long &tickets[],const bool closeby,
                                 const bool slippageenabled,const long slippage,
                                 const ENUM_ORDER_TYPE_FILLING filling);
   //===============
   //===============
   static void       DeletePendingOrder(const long ticket);
   static void       DeletePendingOrders(const long &tickets[]);
   //===============
   //===============
   static void       BreakEven(const long &tickets[],const long belevel,const long beprofit);
   static void       TrailingStop(const long &tickets[],const long tslstart,const long tsldistance,const bool tsllevelenabled,const double tsllevel);
   //===============
   //===============
  };


Qual é a finalidade dessa linha?

static bool cTrade::CheckPlaced(const string symbol,const eTradeType type,const long magic)
  {
//===============
   const int ordersnumber=::OrdersTotal();
//===============

//===============
   for(int i=0;i<ordersnumber && !::IsStopped();i++)
     {
      //===============
      const long ticket=(long)::OrderGetTicket(i);
      //===============

      if(::OrderGetInteger(ORDER_POSITION_ID)>0)continue;
      //===============

Ordem ativa com ID diferente de zero - parcialmente executada?


Não consegui encontrar o cálculo de preenchimento no código.

 
fxsaber:

Observei com interesse a classe de negociação na fonte gerada (MQL5 >600Kb, EX5 > 250Kb).


Qual é a finalidade dessa linha?

Ordem ativa com ID diferente de zero - parcialmente executada?


Não foi possível encontrar o cálculo de preenchimento no código.

#1. Isso é baseado em: #9

#2. Nunca consegui encontrar uma variante funcional do cálculo de preenchimento que funcionasse em todas as corretoras. Por isso, sugiro que o próprio usuário o controle, definindo os parâmetros dos elementos correspondentes.

 
Eugeni Neumoin:

Há muito tempo é possível escrever artigos sobre seu produto. Outro aspecto é que a MQ pode não aceitar todos os artigos. Somente aqueles que eles consideram dignos de publicação.

O autor do artigo criou um ótimo produto. Mas ele precisa ser aprimorado. É desejável usar a roda do mouse nas listas da direita e da esquerda. Para percorrer essas listas.

Posso sentir o grande potencial desse desenvolvimento.


====

O que é ruim. Depois de desinstalar esse utilitário (Expert Advisor), o esquema de cores da janela do gráfico é alterado. Antes da instalação do utilitário, o esquema de cores era o mesmo. Após a instalação, o esquema de cores muda. Isso é uma desvantagem.

É necessário retornar ao esquema de cores que existia antes da instalação do utilitário ao remover o utilitário do gráfico. É melhor não alterar o esquema de cores de forma alguma. Todas as manipulações devem ser feitas em uma janela adicional formada na parte superior do gráfico. É assim que faço quando estou criando padrões graficamente. Uma janela é criada na parte superior do gráfico, onde tudo é desenhado. Após excluir essa janela, não há necessidade de corrigir algo no gráfico. Tudo o que é criado na janela é salvo nos arquivos.

Obrigado por seus comentários!

Em seu indicador, o painel não ocupa todo o espaço do gráfico, portanto, o layout do gráfico não é alterado. Tenho um painel em todo o tamanho disponível e, se eu não alterar o esquema do gráfico, haverá artefatos desagradáveis.

Vou pensar em retornar tudo ao seu estado original ao remover o utilitário do gráfico.

Adicionarei a rolagem de roda em versões futuras. Obrigado!

 
Andrey Barinov:

#1. Ele é baseado no nº 9.

Obrigado, eu havia me esquecido.

#2. Nunca consegui encontrar uma variante funcional de cálculo de preenchimento que funcionasse em todas as corretoras. É por isso que sugiro que o próprio usuário controle isso definindo os parâmetros dos elementos correspondentes.

Você poderia me enviar o nome do servidor de demonstração em que o GetFilling não funciona?