Discussão do artigo "ChatGPT da OpenAI dentro do framework de desenvolvimento MQL4 e MQL5" - página 2

 
Valeriy Yastremskiy #:
Seria bom) como parte do compartilhamento de experiências) a tarefa é complicada pelo fato de o µl não conhecer muito bem as linguagens gpt. Às vezes, é muito difícil obter o código sem erros.
O ChatGPT 3.5 grava normalmente em MQL4/5, portanto, não tenha nenhuma ideia. O valor do artigo deveria estar nos prompts e mostrar o processo de desenvolvimento com o ChatGPT, mas isso não existe. Apenas códigos gerados prontos que não interessam a ninguém, de graça. O valor do artigo é zero, o autor recebe um "D" e eu me pergunto como esse trabalho de má qualidade pôde ser publicado.
 
Alexey Volchanskiy #:
O ChatGPT 3.5 grava normalmente em MQL4/5, não seja tão ingênuo. O valor do artigo deveria estar nos prompts e mostrar o processo de desenvolvimento usando o ChatGPT, mas não existe nada disso. Apenas códigos gerados prontos que não interessam a ninguém, de graça. O valor do artigo é zero, o autor recebe um "D" e eu me pergunto como esse trabalho de má qualidade pôde ser publicado .

Para aqueles que estão no tanque, deixe-me dizer novamente que o objetivo do artigo não é fornecer prompts, mas instilar a ideia de que você mesmo deve produzi-los. Vocês simplesmente não sabem o que aconteceria com o artigo se eu jogasse fora tudo o que fiz. Há toneladas de lixo desnecessário que só confundem as pessoas. O material deve ser simples e claro. E você não está fazendo um exame para me dar um D. Tenha cuidado.

 
Alexey Volchanskiy #:
O ChatGPT 3.5 grava normalmente em MQL4/5, não seja tão ingênuo. O valor do artigo deveria estar nos prompts e mostrar o processo de desenvolvimento usando o ChatGPT, mas não existe nada disso. Apenas códigos gerados prontos que não interessam a ninguém, de graça. O valor do artigo é zero, o autor recebe um "D" e eu me pergunto como esse trabalho de hacker foi autorizado a ser publicado .

Não consegui obter o código para colocar uma ordem de mercado. Se você puder prometer. Todas as vezes retornei o tíquete.

 
Valeriy Yastremskiy #:

Não consegui obter o código para colocar uma ordem de mercado. Se você puder, prometa. Ele sempre retornou o tíquete.

Escreva um procedimento em MQL5 para abrir uma ordem de mercado. A função deve aceitar os seguintes dados de entrada:


1) Lote

2) Take Profit como um módulo da diferença de preço entre os preços de abertura e fechamento

3) Stop Loss como um módulo da diferença de preço entre os preços de abertura e de fechamento

4) Direção da ordem (bool bDirection) true - COMPRAR; false - VENDER

5) Slippage em pontos (esse é o desvio máximo possível do preço de abertura em pontos)

6) Número mágico da ordem


Além disso, se o Stop Loss ou o Take Profit for zero, a ordem deverá ser aberta sem o Stop Loss ou o Take Profit correspondente, o que for zero, ou sem o Stop Loss e o Take Profit, se ambos forem zero.


Além disso, forneça uma verificação de lote para o lote mínimo e máximo permitido e, se o lote estiver fora da faixa permitida, traga-o para o número disponível mais próximo (mínimo ou máximo).


Forneça comentários extensos e tente tornar o código mais curto, e não se esqueça de que os preços de stop loss e take profit são calculados de forma diferente para ordens de compra e venda.


Você não pode usar nenhuma biblioteca, mas apenas os recursos da linguagem MQL5.

// Função para obter o volume corrigido
double CorrectedVolume(double volume)
{
   double minVol = SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN);
   double maxVol = SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MAX);
   double VolStep = SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP);
   
   // Se o volume for menor que o volume mínimo, defina o volume mínimo
   if(volume < minVol)
       return minVol;
   // Se o volume for maior que o volume máximo, defina o volume máximo
   else if(volume > maxVol)
       return maxVol;
   
   // Converter o volume em um múltiplo da etapa do volume
   return (double)((int)(volume / VolStep)) * VolStep; 
}

// Função básica da colocação de pedidos
bool OpenOrder(double volume, double stoploss, double takeprofit, bool bDirection, int slip, int magic)
{
   MqlTick last_tick;
   SymbolInfoTick(_Symbol,last_tick);
   
   // Determinar o preço de abertura da ordem 
   double open_price = bDirection ? last_tick.ask : last_tick.bid;
   // Determinar o valor do item 
   double point = SymbolInfoPoint(_Symbol);
   
   // Ajustar SL e TP dependendo da direção
   double corrected_sl = bDirection ? open_price - stoploss * point : open_price + stoploss * point;
   double corrected_tp = bDirection ? open_price + takeprofit * point : open_price - takeprofit * point;
   
   // Se SL ou TP = 0, a ordem é aberta sem SL ou TP
   if (stoploss == 0) corrected_sl = 0; 
   if (takeprofit == 0) corrected_tp = 0;
   
   // Tipo de transação usado
   ENUM_ORDER_TYPE order_type = bDirection ? ORDER_TYPE_BUY : ORDER_TYPE_SELL;
   
   // Estrutura para preenchimento dos parâmetros de solicitação
   MqlTradeRequest request;
   request.type = order_type;
   request.symbol = _Symbol;
   request.volume = CorrectedVolume(volume);
   request.price = open_price;
   request.sl = corrected_sl;
   request.tp = corrected_tp;
   request.deviation = slip;
   request.magic = magic;
   request.type_filling = ORDER_FILLING_FOK;
   request.type_time = ORDER_TIME_DAY;
   
   MqlTradeResult result;
   return OrderSend(request,result); // Enviar a ordem para a bolsa
}

Eu não entendi imediatamente, tive que detalhar melhor o prompt. Observe que isso levou apenas 5 minutos. E não procurei por nenhum prompt, apenas escrevi o que queria e como. O prompt não é uma pergunta de forma alguma....

 
Tudo isso é inútil com as habilidades atuais dos GPTs, porque o "cliente" precisa encontrar erros no código-fonte gerado, ou seja, saber de fato a resposta correta ou escrever a maior parte dela. Os GPTs atuais são tagarelas.
 
Stanislav Korotky #:
Tudo isso é inútil com as habilidades atuais dos GPTs, porque o "cliente" precisa encontrar erros no código-fonte gerado, ou seja, saber de fato a resposta correta ou escrever a maior parte dela. Os GPTs atuais são tagarelas.

Bem, na verdade você é o mesmo que eu digo, realmente sem conhecer o idioma e corrigir o que ele dá é inútil, tentei explicar isso no artigo, mas não parece muito para as pessoas). Eles querem me dar um aviso e é isso e eu estou no chocolate ))) E o fato de que você tem que pensar sobre isso, GPT está lá ))))

 
Obrigado, Eugene, pelo artigo! Também fiz experiências com o CHATGPT e outras IAs. Sim, às vezes ele produz bons textos, pode até escrever poemas em qualquer estilo, mas na programação ele comete muitos erros, você não pode fazer nada sem verificar e editar.
Concordo com você sobre o Promtov, mesmo quando você faz a mesma solicitação à IA, ela gera textos ou códigos diferentes. É por isso que você precisa se comunicar com ela como uma criança e explicar minuciosamente o que deseja obter dela. O único problema é que você, como programador com experiência e vivência, além de formação em matemática e, portanto, com o estilo de pensamento adequado, pode formular uma tarefa para a IA de forma mais clara e resumida, como uma ToR. Muitos traders não conseguem elaborar TdR elementares para escrever um simples Expert Advisor. Quando comecei a escrever os primeiros Expert Advisors em MQL4, lembrei-me de como éramos ensinados na universidade, em Fortran, a primeiro desenhar um algoritmo do futuro programa e depois escrever o código de acordo com ele. Além disso, como futuros engenheiros de projeto em sistemas radioeletrônicos, fomos ensinados a escrever TOR, o que também foi útil.
 
Evgeniy Ilin #:

É melhor pensar no fato de que o cálculo inicial da MME não é igual aos cálculos subsequentes, porque você precisa salvar barras até ficar com o rosto azul e precisa negociar aqui e agora. Com relação aos ciclos, tudo funciona por barras, não notei nenhuma lentidão perceptível. Você pode finalizar os cálculos como quiser para esse indicador, mas será que ele lhe dará muito (só sei que nada).

Essa é a tarefa do autor da EMA: fazer com que todos os cálculos subsequentes sejam iguais aos anteriores. Você não precisa guardar barras até ficar com o rosto azul, mas, como escrevi acima, você só precisa de 10 a 20 vezes mais barras do que o período.

A questão dos ciclos é muito convincente... É claro que não há absolutamente nenhuma diferença entre um ciclo de 10 barras e um ciclo de 100 barras... Especialmente se você considerar a existência de algoritmos rápidos para calcular as médias.

 
Evgeniy Ilin #:

Não notei isso no início)

   MqlTick last_tick;
   SymbolInfoTick(_Symbol,last_tick);
   
   
   // Determinar o valor do item 
   double point = SymbolInfoPoint(_Symbol); // видимо по аналогии придумано)))
   
   
 
Valeriy Yastremskiy #:

Não notei isso no início)

SymbolInfoDouble(_Symbol,SYMBOL_POINT) - é assim que deve ser. Em geral, você entendeu... Corrigi a maioria dos erros. Eu teria visto tudo isso se fosse o código do meu ts. Há falhas... e se você não sabe o que está fazendo, é inútil. Você está no caminho certo. Ele geralmente está errado. Há uma razão para eu ter escrito esse artigo. Eu poderia criar um super prompt, ele não cometeria nenhum erro e daria tudo perfeitamente, mas seria inútil porque é tudo uma exibição. Em condições reais de campo, fazemos perguntas humanas simples, que, na melhor das hipóteses, podem ser mais específicas, mas, como mostra a prática, isso não reduz muito o pós-processamento.