O código do programa que cria o indicador ZigZagColor no gráfico atual e o remove depois de fechar a EA tem o seguinte aspecto
em bloco de inicialização da EA
//--- create handle of the indicator iCustom
handle_iCustom=iCustom(m_symbol.Name(),Period(),"Examples\\ZigzagColor",
Inp_ZZ_Depth,
Inp_ZZ_Deviation,
Inp_ZZ_Backstep);
ChartIndicatorAdd(ChartID(),0,handle_iCustom);
em bloco de desinicialização do Expert Advisor
(AVISO para aqueles que irão usar este código! Esta versão do código é um intermediário e só é aplicável às configurações do indicador Inp_ZZ_Depth = 80; Inp_ZZ_Deviation = 20; Inp_ZZ_Backstep = 0; em outras configurações, o indicador não será removido! Para apagar o indicador em outras configurações no bloco de desinicialização, é necessário especificá-las em vez de 80,20,0).
//---ChartIndicatorDelete(0,0,"ZigZag(80,20,0)");
Agora tenho que entender como fazê-lo apagar o indicador após alterar suas configurações. Eu tentei a seguinte variante:
Ele limpa o indicador para todas as configurações, mas ao compilar a EA o editor gera 3 avisos sobre a conversão implícita de número para string:
implicit conversion from 'number' to 'string' ZigZag_Fibonacci_(M1).mq5 230 38
Suspeito que tudo gira em torno destes valores: "+Inp_ZZ_Depth+", "+Inp_ZZ_Deviation+","+Inp_ZZ_Backstep+". Bem, tenho que estudar mais a linguagem de programação MQL5.
O código final que cria o indicador ZigZagColor no gráfico atual e o remove após o fechamento da EA se parece com o seguinte
em bloco de inicialização da EA
em bloco de desinicialização da EA
(AVISO para aqueles que irão usar este código! Esta versão do código é um intermediário e só é aplicável às configurações do indicador Inp_ZZ_Depth = 80; Inp_ZZ_Deviation = 20; Inp_ZZ_Backstep = 0; em outras configurações, o indicador não será removido! Para fazer o indicador apagar em outras configurações no bloco de desinicialização, especifique-as em vez de 80,20, 0).
Agora quero entender como fazê-lo apagar o indicador após alterar suas configurações. Eu tentei a seguinte variante:
Ele limpa o indicador para todas as configurações, mas ao compilar a EA o editor gera 3 avisos sobre a conversão implícita de número para string:
Suspeito que tudo gira em torno desses valores: "+Inp_ZZ_Depth+", "+Inp_ZZ_Deviation+","+Inp_ZZ_Backstep+". Bem, tenho que estudar mais a linguagem de programação MQL5.
A advertência sobre uma conversão do tipo implícita. Para uma implementação rigorosa, a conversão implícita dá uma advertência.
Você deve digitar explicitamente. E na MT5 é sempre uma execução rigorosa. No MT4 você pode selecionar e não especificar em propriedades #propriedade estrita
Eu mesmo sou autodidata - e eu mesmo copio dos códigos disponíveis, - O problema é que eu não sei como explicar como esculpir!? - algo dentro me diz como esculpir.
----------------------------------
Eu sei o que eu moldei, faltando lá, também uma rede de arrasto para a linha.
Acrescentei a rede de arrasto.
inputstring t0="---- Trailing Line: -----"; //inputushort InpObjTrailingStop = 0; // Obj: Trailing Stop (distance from price to object, in pips)inputushort InpObjTrailingStep = 0; // Obj: Trailing Step, in pips (1.00045-1.00055=1 pips)inputstring t1="---- Line Name -----"; //inputstring InpObjUpName = "Имя Линии Up"; // Obj: Up (Trailing Horizontal Line) or Trend Line)input ENUM_TRADE_COMMAND InpTradeCommand = UpName_s; // Obj: command: UPinputstring InpObjDownName = "Имя Линии Down"; // Obj: Down (Trailing Horizontal Line) or Trend Line)input ENUM_TRADE_COMMAND InTradeCommand = DownName_b; // Obj: command: DOWNinputushort InpObjStep = 15; // Obj: Step (distance from price to object, in pips)
Advertência sobre a conversão do tipo não-explícito. para execução reta (estrita) uma conversão não-explícita dá uma advertência.
Você deve lançar explicitamente os tipos. E na MT5 é sempre uma execução rigorosa. No MT4 você pode selecionar e não especificar nas propriedades #propriedade estrita
Você está certo, Valery! Nesta forma, tudo funciona como deveria. A versão final no bloco de inicialização da EA:
//--- create handle of the indicator iCustom
handle_iCustom=iCustom(m_symbol.Name(),Period(),"Examples\\ZigzagColor",
Inp_ZZ_Depth,
Inp_ZZ_Deviation,
Inp_ZZ_Backstep);
ChartIndicatorAdd(ChartID(),0,handle_iCustom);
Oooh, muito obrigado, com tanta informação você pode conseguir fazer tanta coisa...
Estou prestes a partir em uma viagem de negócios, então estou pensando em ir mais fundo nos materiais que me foram dados, mas a codificação... Eu também poderia fazê-lo em uma folha de papel, seria uma boa ferramenta de treinamento...
Cumprimentos, romano
Bom dia a todos!
Enquanto Roman está fora em uma viagem de negócios e não participa deste tópico, continuarei a fazer perguntas sobre a linguagem de programação MQL5. Encontrei aPorcentagem Máxima de Risco Equivalente na biblioteca CodeBase em https://www.mql5.com/ru/code/2142. Decidi tentar implementar a abertura de posições de Compra e Venda em um simples Expert Advisor, mas não com um lote fixo, mas com o percentual máximo de risco patrimonial.
Aqui está o código fonte (removi todas as coisas desnecessárias para me concentrar na tarefa principal):
Eu inseri o código da biblioteca especificada nela. Eu obtive o seguinte código:
//+------------------------------------------------------------------+//| 11111111111.mq5 |//| Copyright 2020, MetaQuotes Software Corp. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2020, MetaQuotes Software Corp."#property link"https://www.mql5.com"#property version"1.00"#include <Trade\SymbolInfo.mqh> // добавлено из библиотекиinputint TakeProfit=300; //Тейк-профитinputint StopLoss=250; //Стоп-лоссinputdouble lot=0.1; //Лотinputdouble MaximumPercentageRisk=25; //Риск - добавлено из библиотекиbool UseMaximumPercentageRisk=true; // добавлено из библиотекиdouble Ask;
double Bid;
//--- этот блок добавлен из библиотеки//+------------------------------------------------------------------+//| GetLotSize RPTrade |//+------------------------------------------------------------------+double GetLotSize(double lotsize)
{
//--- Gets pair specs
CSymbolInfo symInfo;
int digits_bn=symInfo.Digits();
double points_bn=symInfo.Point();
string symbol_bn=_Symbol;
//--- adjust lot int tmpdecimal=1;
double old_lot=lotsize;
//---if((NormalizeDouble(AccountInfoDouble(ACCOUNT_FREEMARGIN)*(MaximumPercentageRisk/100)/1000.0,tmpdecimal)<lotsize)
&& UseMaximumPercentageRisk) //лот подходит под риск ?
{
lotsize=NormalizeDouble(AccountInfoDouble(ACCOUNT_FREEMARGIN)
*(MaximumPercentageRisk/100)/1000.0,tmpdecimal); //расчет нового размера лота if(lotsize<SymbolInfoDouble(symbol_bn,SYMBOL_VOLUME_MIN)) //размер лота подходит под минимльный размер лота брокера ?
{
lotsize=SymbolInfoDouble(symbol_bn,SYMBOL_VOLUME_MIN); //Нет! Настройка размера лота под минимальный размер лота брокераPrint(_Symbol," Lot adjusted from ",old_lot," для уменьшения размера разрешенного сервером ",lotsize);
}
else
{
Print(_Symbol," Lot adjusted from ",old_lot,
" to ",lotsize," для соответствия условию максимального риска. В каждой сделке рисковать можно только ",
MaximumPercentageRisk,"% от свободной маржи."); //Да! if(MathAbs(lotsize/SymbolInfoDouble(symbol_bn,SYMBOL_VOLUME_STEP)
-MathRound(lotsize/SymbolInfoDouble(symbol_bn,SYMBOL_VOLUME_STEP)))>1.0 E-10) //Размер лота подходит под разрешенный шаг брокера ?
{
lotsize=SymbolInfoDouble(symbol_bn,SYMBOL_VOLUME_STEP)
*NormalizeDouble(lotsize/SymbolInfoDouble(symbol_bn,SYMBOL_VOLUME_STEP),0); //НЕТ! Перерасчет размера лота. Print("M-",_Symbol," Warning: Your calculated percentage at risk lot size of was not a multiple of minimal step",
SymbolInfoDouble(symbol_bn,SYMBOL_VOLUME_STEP),". Размер лота изменился до",lotsize);
}
}
}
return(lotsize);
}
//+------------------------------------------------------------------+//| Функция открытия длинной (Long) позиции. |//+------------------------------------------------------------------+int OpenLong(double volume=0.1,
int slippage=10,
string comment="Long",
int magic=0)
{
MqlTradeRequest my_trade;
MqlTradeResult my_trade_result;
ZeroMemory(my_trade);
my_trade.action=TRADE_ACTION_DEAL;
my_trade.symbol=Symbol();
my_trade.volume=NormalizeDouble(volume,1);
my_trade.price=NormalizeDouble(Ask,_Digits);
my_trade.sl=NormalizeDouble(Ask-StopLoss*_Point,_Digits);
my_trade.tp=NormalizeDouble(Ask+TakeProfit*_Point,_Digits);
my_trade.deviation=slippage;
my_trade.type=ORDER_TYPE_BUY;
my_trade.type_filling=ORDER_FILLING_FOK;
my_trade.comment=comment;
my_trade.magic=magic;
ResetLastError();
if(OrderSend(my_trade,my_trade_result))
{
Print("Код результата операции - ",my_trade_result.retcode);
}
else
{
Print("Код результата операции - ",my_trade_result.retcode);
Print("Ошибка открытия ордера = ",GetLastError());
}
return(0);
}
//+------------------------------------------------------------------+//| функция открытия короткой (Short) позиции. |//| Аналогична функции открытия длинной позиции. |//+------------------------------------------------------------------+
.
.
.
.
//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit()
{
return(0);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit(constint reason){}
//+------------------------------------------------------------------+//| Expert OnTick function |//+------------------------------------------------------------------+voidOnTick()
{
. double Open[];
.
.
if(Open[1]>(Open[2]))
{
OpenShort(lot,10,"Short",1234);
return;
}
if((Open[1]<Open[2])
{
OpenLong(lot,10,"Long",1234);
cantrade=false;
return;
}
}
}
return;
}
//+------------------------------------------------------------------+
Mas o Expert Advisor continua trabalhando por um lote fixo, ou seja, o risco não é considerado. Por favor, informe o que fazer para fazer a porcentagem de risco do ganho de capital.
Change Chart and Timeframe Модифицированные скрипты для быстрого изменения графиков и таймфреймов на всех графиках при помощи горячих клавиш. Apply Template Простой скрипт для применения шаблона и/или таймфрейма ко всем открытым графикам. Long position Простой скрипт...
Enquanto Roman estiver fora em uma viagem de negócios e não participar ativamente deste tópico, continuarei a fazer perguntas sobre a linguagem de programação MQL5. Encontrei aPorcentagem Máxima de Risco Equivalente na biblioteca CodeBase em https://www.mql5.com/ru/code/2142. Decidi tentar implementar a abertura de posições de Compra e Venda em um simples Expert Advisor, mas não com um lote fixo, mas com o percentual máximo de risco patrimonial.
Aqui está o código fonte (removi todas as coisas desnecessárias para me concentrar na tarefa principal):
Eu inseri o código da biblioteca especificada nela. Eu obtive o seguinte código:
Mas o Expert Advisor continua trabalhando por um lote fixo, ou seja, o risco não é considerado. Por favor, informe o que fazer para fazer a porcentagem de risco do ganho de capital.
Meu respeito Vladimir.
Da maneira como você escreveu, é assim que funciona. Você precisa de uma linha, se Lote==0, então conte o lote de risco e atribua o valor de cálculo à variável Lote no final.
No Quaternário, desta forma, através de variáveis adicionais Lts
bool CheckMoneyForTrade()
{
RefreshRates(); // Обновление данных
Min_Lot=MarketInfo(Symb,MODE_MINLOT); // Миним. колич. лотов
Free =AccountFreeMargin(); // Свободн средства
One_Lot=MarketInfo(Symb,MODE_MARGINREQUIRED);// Стоимость 1 лота
Step =MarketInfo(Symb,MODE_LOTSTEP); // Шаг изменен размераif (Lots > 0) // Если заданы лоты,то
Lts =Lots; // с ними и работаем else// % свободных средств
Lts=MathFloor(Free*Prots/One_Lot/Step)*Step;// Для открытияif(Lts < Min_Lot) Lts=Min_Lot; // Не меньше минимальнif (Lts*One_Lot > Free) // Лот дороже свободн.
{
Alert(" Not enough money for ", Lts," lots");
Work=false;
return(false) ; // Выход из функции()
}
return(true);
}
É assim que é escrito e como funciona. Precisamos de uma linha se Lote==0 então contamos o lote de risco e no final atribuímos valor de cálculo à variável Lote.
No Quaternário é assim, através da variável adicional Lts
MUITO OBRIGADO A TODOS VOCÊS!!!
O código do programa que cria o indicador ZigZagColor no gráfico atual e o remove depois de fechar a EA tem o seguinte aspecto
em bloco de inicialização da EA
em bloco de desinicialização do Expert Advisor
(AVISO para aqueles que irão usar este código! Esta versão do código é um intermediário e só é aplicável às configurações do indicador Inp_ZZ_Depth = 80; Inp_ZZ_Deviation = 20; Inp_ZZ_Backstep = 0; em outras configurações, o indicador não será removido! Para apagar o indicador em outras configurações no bloco de desinicialização, é necessário especificá-las em vez de 80,20,0).
Agora tenho que entender como fazê-lo apagar o indicador após alterar suas configurações. Eu tentei a seguinte variante:
Ele limpa o indicador para todas as configurações, mas ao compilar a EA o editor gera 3 avisos sobre a conversão implícita de número para string:
Suspeito que tudo gira em torno destes valores: "+Inp_ZZ_Depth+", "+Inp_ZZ_Deviation+","+Inp_ZZ_Backstep+". Bem, tenho que estudar mais a linguagem de programação MQL5.
Mais uma vez obrigado por sua gentil ajuda!
Atenciosamente, Vladimir.
MUITO OBRIGADO A TODOS VOCÊS!!!
O código final que cria o indicador ZigZagColor no gráfico atual e o remove após o fechamento da EA se parece com o seguinte
em bloco de inicialização da EA
em bloco de desinicialização da EA
(AVISO para aqueles que irão usar este código! Esta versão do código é um intermediário e só é aplicável às configurações do indicador Inp_ZZ_Depth = 80; Inp_ZZ_Deviation = 20; Inp_ZZ_Backstep = 0; em outras configurações, o indicador não será removido! Para fazer o indicador apagar em outras configurações no bloco de desinicialização, especifique-as em vez de 80,20, 0).
Agora quero entender como fazê-lo apagar o indicador após alterar suas configurações. Eu tentei a seguinte variante:
Ele limpa o indicador para todas as configurações, mas ao compilar a EA o editor gera 3 avisos sobre a conversão implícita de número para string:
Suspeito que tudo gira em torno desses valores: "+Inp_ZZ_Depth+", "+Inp_ZZ_Deviation+","+Inp_ZZ_Backstep+". Bem, tenho que estudar mais a linguagem de programação MQL5.
Mais uma vez obrigado por sua gentil ajuda!
Atenciosamente, Vladimir.
A advertência sobre uma conversão do tipo implícita. Para uma implementação rigorosa, a conversão implícita dá uma advertência.
Você deve digitar explicitamente. E na MT5 é sempre uma execução rigorosa. No MT4 você pode selecionar e não especificar em propriedades #propriedade estrita
Eu mesmo sou autodidata - e eu mesmo copio dos códigos disponíveis, - O problema é que eu não sei como explicar como esculpir!? - algo dentro me diz como esculpir.
----------------------------------
Eu sei o que eu moldei, faltando lá, também uma rede de arrasto para a linha.
Acrescentei a rede de arrasto.
Advertência sobre a conversão do tipo não-explícito. para execução reta (estrita) uma conversão não-explícita dá uma advertência.
Você deve lançar explicitamente os tipos. E na MT5 é sempre uma execução rigorosa. No MT4 você pode selecionar e não especificar nas propriedades #propriedade estrita
Você está certo, Valery! Nesta forma, tudo funciona como deveria. A versão final no bloco de inicialização da EA:
no bloco de desinicialização da EA:
Obrigado pela dica!
Cumprimentos, Vladimir.
Oooh, muito obrigado, com tanta informação você pode conseguir fazer tanta coisa...
Estou prestes a partir em uma viagem de negócios, então estou pensando em ir mais fundo nos materiais que me foram dados, mas a codificação... Eu também poderia fazê-lo em uma folha de papel, seria uma boa ferramenta de treinamento...
Cumprimentos, romano
Bom dia a todos!
Enquanto Roman está fora em uma viagem de negócios e não participa deste tópico, continuarei a fazer perguntas sobre a linguagem de programação MQL5. Encontrei a Porcentagem Máxima de Risco Equivalente na biblioteca CodeBase em https://www.mql5.com/ru/code/2142. Decidi tentar implementar a abertura de posições de Compra e Venda em um simples Expert Advisor, mas não com um lote fixo, mas com o percentual máximo de risco patrimonial.
Aqui está o código fonte (removi todas as coisas desnecessárias para me concentrar na tarefa principal):
Eu inseri o código da biblioteca especificada nela. Eu obtive o seguinte código:
Mas o Expert Advisor continua trabalhando por um lote fixo, ou seja, o risco não é considerado. Por favor, informe o que fazer para fazer a porcentagem de risco do ganho de capital.
Cumprimentos, Vladimir.
Bom dia a todos!
Enquanto Roman estiver fora em uma viagem de negócios e não participar ativamente deste tópico, continuarei a fazer perguntas sobre a linguagem de programação MQL5. Encontrei a Porcentagem Máxima de Risco Equivalente na biblioteca CodeBase em https://www.mql5.com/ru/code/2142. Decidi tentar implementar a abertura de posições de Compra e Venda em um simples Expert Advisor, mas não com um lote fixo, mas com o percentual máximo de risco patrimonial.
Aqui está o código fonte (removi todas as coisas desnecessárias para me concentrar na tarefa principal):
Eu inseri o código da biblioteca especificada nela. Eu obtive o seguinte código:
Mas o Expert Advisor continua trabalhando por um lote fixo, ou seja, o risco não é considerado. Por favor, informe o que fazer para fazer a porcentagem de risco do ganho de capital.
Meu respeito Vladimir.
Da maneira como você escreveu, é assim que funciona. Você precisa de uma linha, se Lote==0, então conte o lote de risco e atribua o valor de cálculo à variável Lote no final.
No Quaternário, desta forma, através de variáveis adicionais Lts
Cavalheiros, o tópico inteiro é uma página de discussão, o resto é código. Não é suficiente apenas inserir os códigos?
Como você ajuda então?
Como você ajuda então?
Colocar apenas o que é pedido
É assim que é escrito e como funciona. Precisamos de uma linha se Lote==0 então contamos o lote de risco e no final atribuímos valor de cálculo à variável Lote.
No Quaternário é assim, através da variável adicional Lts
Obrigado, Valery, vou tentar à noite!
Atenciosamente, Vladimir.