int digits = (int)SymbolInfoInteger(_Symbol,SYMBOL_DIGITS); // number of decimal placesdouble point = SymbolInfoDouble(_Symbol,SYMBOL_POINT); // pointdouble ask = SymbolInfoDouble(_Symbol,SYMBOL_ASK); // current price for closing SHORTdouble SL = ask-_SL*point; // unnormalized SL value
SL = NormalizeDouble(SL,digits); // normalizing Stop Lossdouble TP = ask+_TP*point; // unnormalized TP value
TP = NormalizeDouble(TP,digits); // normalizing Take Profitdouble open_price = SymbolInfoDouble(_Symbol,SYMBOL_BID);
if(!trade.Buy(Volume,_Symbol,open_price,SL,TP,""))
{
//--- failure messagePrint("Sell() method failed. Return code=",trade.ResultRetcode(),
". Code description: ",trade.ResultRetcodeDescription());
return (false);
}
else
{
Print("Sell() method executed successfully. Return code=",trade.ResultRetcode(),
" (",trade.ResultRetcodeDescription(),")");
}
Por favor, diga-me, porque é que no testador de estratégias eu não estabeleço limites de perda e lucro e só abro posição a preço de mercado?
Estou a utilizar CTrade (trade.Buy) para abrir uma posição.
Tentei abri-lo com (trade.PositionOpen), a mesma coisa, abre e põe paragens em demonstração, as paragens são 0 no Testador de Estratégia, não sei qual pode ser o problema.
Olá, caros programadores. Penso que os programadores são como deuses - criar algo a partir do nada, do nada e criar coisas materiais é simplesmente fantástico... Li um artigo sobre o tempo, mas não diz nada sobre estabelecer uma periodicidade, nem sequer periodicidade, mas habilitar e incapacitar um Expert Advisor em certas alturas. Não sei se alguém alguma vez fez essa pergunta. Tenho de mudar o nome da minha EA para começar e parar em alturas diferentes, mas como o MT5 tem apenas um par - uma EA, tenho de alternar entre elas manualmente. Obrigado
Основное правило трейдера - дай прибыли расти, обрезай убытки! В статье рассматривается один из основных технических приемов, позволяющий следовать этому правилу - перемещение уровня защитной остановки (уровня Stoploss) вслед за растущей прибылью позиции, другими словами - скользящий стоп или трейлинг стоп (trailingstop). Приводится пошаговая процедура создания класса для трейлинг стопа на индикаторах SAR и NRTR, который каждый желающий сможет за 5 минут встроить в своего эксперта или использовать независимо для управления позициями на своем счете.
Eu ponho barras de reboque, mas elas não ligam e desligam no momento certo, e não têm em conta a inversão. A ideia é a seguinte: depois de uma paragem de percurso, normalmente no final de um período, por exemplo uma hora ou 15 minutos, esperar alguns minutos e deixá-lo ligar novamente e determinar o esquema pelo indicador e passar à paragem seguinte...:-))))
Estou a tentar fazer uma média de uma troca. Mas nos parâmetros.
PositionModify(Symbol,SL,ТР)
Não posso determinar o preço de abertura porque recebo o preço de abertura e quero o preço que foi deslocado como resultado da média.
Ou apenas através do histórico da encomenda para saber o preço da primeira e segunda encomenda e já com base nestes dados para ser calculada a média, não quero que desta forma seja demasiado complicado para mim!
datetime end=TimeCurrent(); // текущее серверное времяdatetime start=end-PeriodSeconds(PERIOD_D1);// установим начало на сутки назад//--- запросим в кэш программы нужный интервал торговой историиHistorySelect(start,end);
//--- получим количество сделок в историиint deals=HistoryDealsTotal();
//--- получим тикет сделки, имеющей последний индекс в спискеulong deal_ticket=HistoryDealGetTicket(deals-1);
if(deal_ticket>0) // получили в кэш сделку, работаем с ней
{
//--- тикет ордера, на основании которого была проведена сделкаulong order =HistoryDealGetInteger(deal_ticket,DEAL_ORDER);
long order_magic=HistoryDealGetInteger(deal_ticket,DEAL_MAGIC);
long pos_ID =HistoryDealGetInteger(deal_ticket,DEAL_POSITION_ID);
double priceh =HistoryDealGetInteger(deal_ticket,DEAL_PRICE); // не могу определить цену открытия
PrintFormat("Сделка #%d по ордеру #%d с ORDER_MAGIC=%d участвовала в позиции %d",
deals-1,order,order_magic,pos_ID);
}
else// неудачная попытка получения сделки
{
PrintFormat("Всего в истории %d сделок, не удалось выбрать сделку"+
" с индексом %d. Ошибка %d",deals,deals-1,GetLastError());
}
//--- получим общее количество позицийint positions=PositionsTotal();
//--- пробежим по списку ордеровfor(int i=0;i<positions;i++)
{
ResetLastError();
//--- скопируем в кэш позицию по ее номеру в спискеstring symbol=PositionGetSymbol(i); // попутно получим имя символа, по которому открыта позицияif(symbol!="") // позицию скопировали в кэш, работаем с ней
{
long pos_id =PositionGetInteger(POSITION_IDENTIFIER);
double price =PositionGetDouble(POSITION_PRICE_OPEN);
ENUM_POSITION_TYPE type=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);
long pos_magic =PositionGetInteger(POSITION_MAGIC);
string comment =PositionGetString(POSITION_COMMENT);
if(pos_magic==EA_Magic)
{
PositionModify(Symbol(),NormalizeDouble(( - StopLoss*_Point),4),
NormalizeDouble(( + TakeProfit*_Point),4)); // ну здесь еще через запрос в зависимости от типа ордера
}
PrintFormat("Позиция #%d по %s: POSITION_MAGIC=%d, цена=%G, тип=%s, комментарий=%s",
pos_id,symbol,pos_magic,price,EnumToString(type),comment);
}
else// вызов PositionGetSymbol() завершился неудачно
{
PrintFormat("Ошибка при получении в кэш позиции c индексом %d."+
" Код ошибки: %d", i, GetLastError());
}
}
Caros Senhores, ajudem-me!!! Já desanimado no último passo, a partir de uma estratégia pronta. Não se pode fazer a média de uma troca, através de
Estou a tentar fazer uma média de uma troca. Mas nos parâmetros.
Não posso determinar o preço de abertura porque recebo o preço de abertura e quero o preço que foi deslocado como resultado da média.
Ou apenas através do histórico da encomenda para saber o preço da primeira e segunda encomenda e já com base nestes dados para ser calculada a média, não quero que desta forma seja demasiado complicado para mim!
Deverá elaborar primeiro um algoritmo de cálculo da média manual. Agora tem um valor negativo de stoploss, e deve ter o preço real de stoploss. Deve definir estes parâmetros de acordo com o seu algoritmo de cálculo da média.
A variável costumava ser de tipo externo, agora é de entrada, mas já é uma constante, externa não é agora exibida no menu de indicadores. É possível fazer como antes ou é necessário criar variáveis adicionais para poder alterar estes valores?
Por exemplo, temos uma EA com o evento OnTick, que abrirá ou fechará uma posição, dependendo das condições. Pode testar a EA no testador de estratégia onde pode definir o período de tempo. Não vejo como eles estão interligados. A EA não é testada no Testador de Estratégia, onde reage a cada tick? Ou reage apenas ao período de tempo seleccionado no Strategy Tester? Espero que esta questão seja clara
Por favor, diga-me, porque é que no testador de estratégias eu não estabeleço limites de perda e lucro e só abro posição a preço de mercado?
Estou a utilizar CTrade (trade.Buy) para abrir uma posição.
Tentei abri-lo com (trade.PositionOpen), a mesma coisa, abre e põe paragens em demonstração, as paragens são 0 no Testador de Estratégia, não sei qual pode ser o problema.
Compreendo que o posso fazer manualmente, mas preciso de um robô para o fazer.
Como posso criar uma função para modificar uma encomenda?
https://www.mql5.com/ru/articles/134
Olá, pode dizer-me se existe uma diferença para uma EA: um depósito mínimo de 1000& (conta dólar) ou 1000rublos (conta rublo)?
Caros Senhores, ajudem-me!!! Já desanimado no último passo, a partir de uma estratégia pronta. Não se pode fazer a média de uma troca, através de
Estou a tentar fazer uma média de uma troca. Mas nos parâmetros.
Não posso determinar o preço de abertura porque recebo o preço de abertura e quero o preço que foi deslocado como resultado da média.
Ou apenas através do histórico da encomenda para saber o preço da primeira e segunda encomenda e já com base nestes dados para ser calculada a média, não quero que desta forma seja demasiado complicado para mim!
Caros Senhores, ajudem-me!!! Já desanimado no último passo, a partir de uma estratégia pronta. Não se pode fazer a média de uma troca, através de
Estou a tentar fazer uma média de uma troca. Mas nos parâmetros.
Não posso determinar o preço de abertura porque recebo o preço de abertura e quero o preço que foi deslocado como resultado da média.
Ou apenas através do histórico da encomenda para saber o preço da primeira e segunda encomenda e já com base nestes dados para ser calculada a média, não quero que desta forma seja demasiado complicado para mim!
Olá, por favor esclareça uma coisa.
Por exemplo, temos uma EA com o evento OnTick, que abrirá ou fechará uma posição, dependendo das condições. Pode testar a EA no testador de estratégia onde pode definir o período de tempo. Não vejo como eles estão interligados. A EA não é testada no Testador de Estratégia, onde reage a cada tick? Ou reage apenas ao período de tempo seleccionado no Strategy Tester? Espero que esta questão seja clara