Discussão do artigo "Criação de Consultores Multiespecializados com base em Modelos de Comércio" - página 4

 

Muito obrigado ao autor pelo artigo e pelo código. Hoje, reformulei o código de um Expert Advisor simples para a classe de modelo. Depois de alguns esforços, consegui realizar um trabalho paralelo em diferentes pares e períodos de tempo.

A única coisa que tive de corrigir no código foi modernizar um pouco a função GetMyPosition() para que ela conte o volume apenas pelo símbolo passado como parâmetro. Caso contrário, um modelo que trabalha em um pacote de dois ou mais pares ao chamar GetMyPosition() obtém o volume total de vários pares em vez do volume separado necessário para cada par. Também adicionei um método à classe CTableOrders para obter o símbolo da ordem.

string            OrderSymbol(){return(m_symbol);}


Mais uma vez, obrigado!

 

Obrigado, amigos, pela apreciação de meu trabalho! É agradável perceber que as questões que estou considerando são relevantes e necessárias. Não vamos entrar em polêmica com críticos analfabetos. Eles sempre estarão lá e não serão persuadidos nem mesmo em coisas óbvias.

H.Y. É melhor sobrecarregar o método double GetMyPosition() de acordo: double GetMyPosition(string Symbol). Isso lhe dará mais flexibilidade e versatilidade.

Sem dúvida, o código será aprimorado e alterado com o tempo, pois é impossível levar em conta todas as áreas possíveis de sua aplicação de uma só vez.

Mais uma vez, obrigado e Feliz Ano Novo de 2011! Felicidade e boa sorte!

 
Огромное спасибо автору за статью, обязательно возьму себе на вооружение.
 

Obrigado, Vasily, pelo artigo - em minha opinião, essa é a melhor abordagem até o momento. É simplesmente incrível como você conseguiu depurar esse código.

Vasily - como você depurou esse código sem um depurador em um testador? Acho muito difícil trabalhar sem um depurador em um testador - porque os sinais são diferentes e em condições diferentes.

Compartilhe sua experiência de depuração.

 

Olá. Muito obrigado por esse excelente tutorial.

Depurei esse código e encontrei um erro na linha 355 em Model.mqh

switch(op_type)
 {
 case ORDER_TYPE_BUY:
 case ORDER_TYPE_SELL:
 rez=m_trade.PositionOpen(m_symbol,op_type,lot_send,price,0.0,0.0,comment);
 break;

Em ORDER_TYPE_BUY: is none Funktion.Is that right?No function by Buy?
Alterei o código em:

switch(op_type)
 {
 case ORDER_TYPE_BUY:
 rez=m_trade.PositionOpen(m_symbol,op_type,lot_send,price,0.0,0.0,comment);
 break;
 case ORDER_TYPE_SELL:
 rez=m_trade.PositionOpen(m_symbol,op_type,lot_send,price,0.0,0.0,comment);
 break;


Mas, no Jornual, você vê que ele não tem posição longa, apenas curta.


ea_modelclass



Não encontro o erro. Preciso de ajuda.


MfG Christian

Arquivos anexados:
logfile.txt  100 kb
 
Após as últimas atualizações do terminal, o modelo parou de funcionar. Alguém pode explicar o que aconteceu?
 
YYURIYY:
Após as últimas atualizações do terminal, o modelo parou de funcionar. Alguém pode explicar o que aconteceu?


Da mesma forma. Estou analisando o código vírgula por vírgula há uma semana. A estratégia coloca ordens de venda, mas a função GetNumberOrders() retorna apenas ordens de venda = 0, mas ordens de compra = 1.

Gostaria de pedir ajuda ao Vasily, que é o desenvolvedor desse código. Ainda não consegui descobrir qual é o motivo.

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 

Parabéns por este artigo!!!

Fico feliz que mais pessoas estejam pensando nessa ideia. Há algum tempo, tentei desenvolver um modelo de EA multimoeda e multiestratégia em MQL4

Desde que a MQL5 chegou, eu estava tentando projetar o modelo de objeto de tal EA e começar a implementá-lo

Infelizmente, não tenho tempo livre para essas atividades... :-(

Por favor, continue com esse projeto... é assim que eu penso... ter uma estrutura em que seja possível implementar facilmente várias estratégias e com a possibilidade de ativar/desativar qualquer uma delas, manual ou automaticamente. Assim, podemos ter um portfólio de EAs e até mesmo adicionar ou remover alguns EAs, se necessário.

Obrigado por isso!!!

PS: Aqui está um link para quem estiver interessado...

https:// www.mql5.com/en/forum/118148

Cooperation on interesting projects: TRENDLINE AUTOTRADER and UNIVERSAL MULTICURRENCY MULTISTRATEGY TRADER TEMPLATE - MQL4 forum
  • www.mql5.com
Cooperation on interesting projects: TRENDLINE AUTOTRADER and UNIVERSAL MULTICURRENCY MULTISTRATEGY TRADER TEMPLATE - MQL4 forum
 
YYURIYY:
Após as últimas atualizações do terminal, o modelo parou de funcionar. Alguém pode explicar o que aconteceu?

Acho que descobri o que aconteceu. No código, você precisa alterar o :

#property copyright "Copyright 2010, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"

#include <Trade\_OrderInfo.mqh>
#include <Trade\_HistoryOrderInfo.mqh>
#include <Arrays\List.mqh>
class CTableOrders : CObject
{
private:
   ulong             m_magic;       // Magik do especialista que emitiu a ordem
   ulong             m_ticket;      // Ticket da ordem principal
   ulong             m_ticket_sl;    // Ticket da ordem de recompra da negociação executada com base na ordem principal (Stop Loss)
   ulong             m_ticket_tp;    // Bilhete da ordem de recompra da negociação executada com base na ordem principal (Take Profit)
   ENUM_ORDER_TYPE   m_type;         // Tipo de ordem principal
   datetime          m_time_setup;  // Tempo de configuração do pedido
   double            m_price;       // Preço do pedido
   double            m_sl;          // Preço sugerido de stop loss
   double            m_tp;          // Preço do Take Profit estimado
   double            m_volume_initial;      // Volume do pedido
public:
                     CTableOrders();
   bool              Add(COrderInfo &order_info, double stop_loss, double take_profit);
   bool              Add(CHistoryOrderInfo &history_order_info, double stop_loss, double take_profit);
   double            StopLoss(void){return(m_sl);}
   double            TakeProfit(void){return(m_tp);}
   ulong             Magic(){return(m_magic);}
   ulong             Ticket(){return(m_ticket);}
   int               Type() const;
   datetime          TimeSetup(){return(m_time_setup);}
   double            Price(){return(m_price);}
   double            VolumeInitial(){return(m_volume_initial);}
};

CTableOrders::CTableOrders(void)
{
   m_magic=0;
   m_ticket=0;
   m_type=0;
   m_time_setup=0;
   m_price=0.0;
   m_volume_initial=0.0;
}

bool CTableOrders::Add(CHistoryOrderInfo &history_order_info, double stop_loss, double take_profit)
{
   if(HistoryOrderSelect(history_order_info.Ticket())){
      m_magic=history_order_info.Magic();
      m_ticket=history_order_info.Ticket();
       m_type=history_order_info.OrderType();
      m_time_setup=history_order_info.TimeSetup();
      m_volume_initial=history_order_info.VolumeInitial();
      m_price=history_order_info.PriceOpen();
      m_sl=stop_loss;
      m_tp=take_profit;
      return(true);
   }
   else return(false);
}

bool CTableOrders::Add(COrderInfo &order_info, double stop_loss, double take_profit)
{
   if(OrderSelect(order_info.Ticket())){
      m_magic=order_info.Magic();
      m_ticket=order_info.Ticket();
      m_type=order_info.OrderType();
      m_time_setup=order_info.TimeSetup();
      m_volume_initial=order_info.VolumeInitial();
      m_price=order_info.PriceOpen();
      m_sl=stop_loss;
      m_tp=take_profit;
      return(true);
   }
   else return(false);
}

int   CTableOrders::Type() const
{
   return((ENUM_ORDER_TYPE)m_type);
}
 

O escopo deste artigo é vasto e *muito* bem pensado.

Não consigo expressar em palavras o quanto aprecio seus esforços para criar essa estrutura; você também explicou o raciocínio por trás de sua abordagem em um nível compreensível (pelo menos para mim!). Concordo que este artigo vai muito além dos conceitos - trata-se de uma aplicação prática, adequada e, o mais importante, prudente de técnicas de negociação e programação OO!

Uma solicitação: seus comentários nos arquivos em inglês podem ser traduzidos? Além disso, alguém pode me indicar ferramentas para trabalhar mais com o idioma russo? Os comentários no MetaEditor nem sequer aparecem como idioma russo, mas sim como caracteres acentuados distorcidos, não muito diferentes deste exemplo:

 // Èíèöèàëèçèóðóåì óêàçàòåëü ìîäåëüþ MACD

Estou usando o Chrome+Google Translate para visualizar o site em russo há algum tempo, mas em artigos mais longos (especialmente este) só consigo traduzir uma parte limitada do documento. Eu estava muito ansioso para ler este artigo na íntegra e tive que esperar algum tempo, o que, pelo menos para mim, foi dificilmente tolerável! Qualquer conselho sobre como se tornar mais amigável em relação a idiomas estrangeiros será aceito com grande consideração!

Uma obra-prima, Sr. Sokolov. Meus cumprimentos e gratidão pelo seu trabalho, e estou ansioso para implementar minhas visões para essa excelente abordagem dos sistemas de negociação. O senhor resolveu muitos conflitos que eu tinha ao tentar projetar um sistema que pudesse atender às minhas exigências do sistema que, em última análise, quero operar. Para os problemas restantes que ainda precisam ser resolvidos, essa estrutura conduz meus esforços na direção certa por design.