Características úteis da KimIV

 

Nesta linha eu colocarei os códigos de minhas funções na MQL4, darei exemplos de seu uso e responderei perguntas relacionadas ao seu uso. Cada função será publicada em dois posts. O primeiro post conterá o código de função, o segundo - exemplos de uso e breves explicações. Às vezes eu anexarei o código de um script ao segundo post para realmente testar a função e exibir os resultados.

Começarei com funções para lidar com os pedidos de acordo com o pedido de Lukyanov no tópico "Como executar dois EAs ao mesmo tempo" no final.

Que a primeira seja a função de ajuste do pedido (versão de teste MT4):

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия  : 13.06.2007                                                      |
//|  Описание : Установка ордера. Версия функции для тестов на истории.        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (NULL или "" - текущий символ)          |
//|    op - операция                                                           |
//|    ll - лот                                                                |
//|    pp - цена                                                               |
//|    sl - уровень стоп                                                       |
//|    tp - уровень тейк                                                       |
//|    mn - Magic Number                                                       |
//|    ex - Срок истечения                                                     |
//+----------------------------------------------------------------------------+
void SetOrder(string sy, int op, double ll, double pp,
              double sl=0, double tp=0, int mn=0, datetime ex=0) {
  color clOpen;
  int   err, ticket;
 
  if (sy=="" || sy=="0") sy=Symbol();
  if (op==OP_BUYLIMIT || op==OP_BUYSTOP) clOpen=clOpenBuy; else clOpen=clOpenSell;
  ticket=OrderSend(sy, op, ll, pp, Slippage, sl, tp, "", mn, ex, clOpen);
  if (ticket<0) {
    err=GetLastError();
    Print("Error(",err,") set ",GetNameOP(op),": ",ErrorDescription(err));
    Print("Ask=",Ask," Bid=",Bid," sy=",sy," ll=",ll,
          " pp=",pp," sl=",sl," tp=",tp," mn=",mn);
  }
}
//+----------------------------------------------------------------------------+
 
Haverá alguma característica publicada para o comércio real? P.S.: Obrigado pelo tema. Acho que será muito popular e procurado.
 
Olá, Igor!
Eu apoio a idéia. Decisão certa........!!!
Seu código é enorme, as perguntas surgem com freqüência, e não é bom se dirigir a você nos postos de outras pessoas e sobre outros tópicos.
 

Ótimo.

Sugestão para os desenvolvedores: começar a formar uma biblioteca de funções. Em minha opinião, para isto, é desejável apresentar aos requisitos de projeto comunitário (por exemplo, descrição obrigatória de variáveis, estipulação de limites de uso, número de caracteres por corda, etc.). Um artigo da MQ sobre o assunto seria uma boa idéia.

Com o tempo, não apenas funções simples mas também complexas aparecerão na biblioteca.

 
Lukyanov:
Haverá características publicadas para o comércio real?

Sim, eles vão... A seguir será a função SetOrder() para comércio online...


Exemplos de como usar a função SetOrder():

1. Estabelecendo um pedido BuyLimit com 0,1 lote, 50 pips abaixo do preço atual:

SetOrder(NULL, OP_BUYLIMIT, 0.1, Ask-50*Point);

2. Estabelecendo um pedido BuyStop com lote 0,3 36 pips acima do preço atual com um stop de 32 pips:

SetOrder(NULL, OP_BUYSTOP, 0.3, Ask+36*Point, Ask+(36-32)*Point);

3. Colocando um pedido de SellLimit por lote 0,2 a 42 pips acima do preço atual com um takeaway de 50 pips:

SetOrder(NULL, OP_SELLLIMIT, 0.2, Bid+42*Point, 0, Bid+(42-50)*Point);

4. Colocando um pedido SellStop por lote 0,5 por 100 pips abaixo do preço atual com um stop de 30 pips e um takeaway de 70 pips:

SetOrder(NULL, OP_SELLSTOP, 0.5, Bid-100*Point, Bid-(100-30)*Point, Bid-(100+70)*Point);

5. Um pedido BuyLimit com lote 0,1 colocou 50 pips abaixo do preço atual com número mágico 123456 e expira em duas horas:

SetOrder(NULL, OP_BUYLIMIT, 0.1, Ask-50*Point, 0, 0, 123456, TimeCurrent()+2*60*60);
O trailer é um roteiro da vida real com os exemplos acima. Os primeiros quatro exemplos são comentados.
Arquivos anexados:
 
VBAG:
Olá, Igor!
Eu apoio a idéia. Decisão certa........!!!
Seu código é enorme, as perguntas surgem com freqüência, e não é bom se dirigir a você nos postos de outras pessoas e sobre outros tópicos.
Bem, aqui podemos conversar. Formule suas perguntas, eu terei prazer em respondê-las :-)
 
Mostrar sua versão dos atrasos entre as transações comerciais
Obrigado.
 
Obrigado pelo tópico útil, embora eu seja sobre tortas queimadas, mas ainda assim talvez alguém tenha enfrentado o problema de estocagem e amostragem a partir de grandes conjuntos de dados em µl. µl e bancos de dados? Alguém já pensou nessa direção?
 
zhuki писал (а):
Mostrar sua versão de atrasos entre comércios

Eu não faço nenhum atraso entre as negociações. Isto é, se eu precisar colocar duas ou mais ordens, eu realizo estas operações comerciais sem uma pausa entre elas. Mas entre tentativas comerciais, que têm de ser repetidas se houver um erro ao contatar o servidor, faço uma pausa de acordo com as recomendações dos desenvolvedores do MT4. Como exemplo, você pode ver como tais pausas são implementadas em minha função SetOrder() para comércio on-line. Diferentes pausas são feitas para diferentes erros devolvidos pelo servidor comercial.

Esta função SetOrder() é utilizada para definir ordens pendentes. É recomendado para uso em negociações on-line em contas Demo e Live.

Arquivos anexados:
 
Muito original, mas explica por que os atrasos de 7,7, 17, 11 segundos. Além disso, e se houver mais de um Expert Advisor, então a análise é necessária.
 
zhuki:
...explicar porque há um atraso de 7,7,17,11 segundos . Isto é uma brincadeira ou é justificado.

Que tipo de brincadeira pode haver com dinheiro real?

Erros 129 (Lance ou preço pedido incorreto), 130 (Paradas incorretas), 134 (Dinheiro insuficiente), 136 (Sem preço) farão uma pausa de 7,7 segundos. Os desenvolvedores do MT4 recomendam pausas de mais de 5 segundos nestes casos. Coloquei 7,7 segundos. Mais valia ter colocado 6,1 segundos. Eu não gosto de valores redondos por causa de sua atratividade, por isso eu estabeleço valores não circulares.

A pausa de 17 segundos deveria ter sido por erro 145 (modificação proibida). Mas como a função SetOrder não trata de modificações, eu removi o tratamento deste erro. Obrigado por trazer este aspecto da minha função à minha atenção!

A pausa de 11 segundos está localizada dentro do laço que verifica o status do subsistema de comércio. Você pode definir para 15 ou 30 segundos. Você pode definir para 15 ou 30 segundos, o que preferir.

zhuki:
Também me pergunto o que fazer se existe mais de um Expert Advisor, e você não pode fazer sem análise.

Para vários Expert Advisors em uma conta comercial, o erro 146 (subsistema comercial está ocupado) é tratado. A função SetOrder espera até que o subsistema comercial esteja livre.


Advertência! Eu editei o post anterior. Fez mudanças na função SetOrder.