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, díganme, ¿por qué en el probador de estrategias no establezco el stop loss y el profit y sólo abro la posición a precio de mercado?
Estoy usando CTrade (trade.Buy) para abrir una posición.
He intentado abrirlo con (trade.PositionOpen), lo mismo, se abre y pone stops en demo, los stops son 0 en el Probador de Estrategias, no sé cuál puede ser el problema.
Hola, queridos programadores. Creo que los programadores son como dioses - crear algo que funcione de la nada, de la nada y crear cosas materiales es simplemente fantástico... Leí un artículo sobre el tiempo, pero no dice nada sobre establecer una periodicidad, ni siquiera periodicidad, sino habilitar y deshabilitar un Asesor Experto en ciertos momentos. No sé si alguien se lo ha preguntado alguna vez. Tengo que cambiar el nombre de mi EA para que se inicie y se detenga en diferentes momentos, pero como MT5 sólo tiene un par - un EA, tengo que cambiar entre ellos manualmente. Gracias
Основное правило трейдера - дай прибыли расти, обрезай убытки! В статье рассматривается один из основных технических приемов, позволяющий следовать этому правилу - перемещение уровня защитной остановки (уровня Stoploss) вслед за растущей прибылью позиции, другими словами - скользящий стоп или трейлинг стоп (trailingstop). Приводится пошаговая процедура создания класса для трейлинг стопа на индикаторах SAR и NRTR, который каждый желающий сможет за 5 минут встроить в своего эксперта или использовать независимо для управления позициями на своем счете.
He puesto barras de seguimiento, pero no se activan y desactivan en el momento adecuado, y no tienen en cuenta la inversión. La idea es la siguiente: después del trailing stop, normalmente al final de un periodo, por ejemplo una hora o 15 minutos, esperar unos minutos y dejar que se encienda de nuevo y determinar la disposición por el indicador y pasar al siguiente stop...:-))))
Estimados señores, ¡¡¡ayúdenme!!! Ya se está desanimando en el último paso, a partir de una estrategia preparada. No se puede promediar un comercio, a través de
Tratando de promediar un comercio. Pero en los parámetros.
PositionModify(Symbol,SL,ТР)
No puedo determinar el precio de apertura porque obtengo el precio de apertura y quiero el precio que se desplazó como resultado del promedio.
¡O simplemente a través del historial de pedidos averiguar el precio del primer y segundo pedido y ya en base a estos datos hacer la media, no quiero de esta manera es demasiado complicado para mí!
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());
}
}
Estimados señores, ¡¡¡ayúdenme!!! Ya se está desanimando en el último paso, a partir de una estrategia preparada. No se puede promediar un comercio, a través de
Estoy tratando de promediar un intercambio. Pero en los parámetros.
No puedo determinar el precio de apertura porque obtengo el precio de apertura y quiero el precio que se desplazó como resultado del promedio.
¡O simplemente a través del historial de pedidos averiguar el precio del primer y segundo pedido y ya en base a estos datos hacer la media, no quiero de esta manera es demasiado complicado para mí!
Primero deberías elaborar un algoritmo de promediación manual. Ahora tiene un valor negativo de stoploss, y debería tener el precio real de stoploss. Deberá ajustar estos parámetros en función de su algoritmo de promediación.
La variable antes era de tipo extern, ahora es input, pero ya es una constante, ahora extern no aparece en el menú de indicadores. ¿Se puede hacer como antes o es necesario crear variables adicionales para poder cambiar estos valores?
Por ejemplo, tenemos un EA con el evento OnTick, que abrirá o cerrará una posición dependiendo de las condiciones. Puede probar el EA en el probador de estrategias donde puede establecer el marco de tiempo. No veo cómo están interrelacionados. ¿No es el EA probado en el Probador de Estrategias, y reacciona a cada tick? ¿O sólo reacciona al marco temporal seleccionado en el Probador de Estrategias? Espero que esta pregunta sea clara
Por favor, díganme, ¿por qué en el probador de estrategias no establezco el stop loss y el profit y sólo abro la posición a precio de mercado?
Estoy usando CTrade (trade.Buy) para abrir una posición.
He intentado abrirlo con (trade.PositionOpen), lo mismo, se abre y pone stops en demo, los stops son 0 en el Probador de Estrategias, no sé cuál puede ser el problema.
Entiendo que puedo hacerlo manualmente, pero necesito un robot para hacerlo.
¿Cómo puedo crear una función para modificar un pedido?
https://www.mql5.com/ru/articles/134
Hola, ¿puede decirme si hay alguna diferencia para un EA: un depósito mínimo de 1000& (cuenta en dólares) o 1000rublos (cuenta en rublos)?
Estimados señores, ¡¡¡ayúdenme!!! Ya se está desanimando en el último paso, a partir de una estrategia preparada. No se puede promediar un comercio, a través de
Tratando de promediar un comercio. Pero en los parámetros.
No puedo determinar el precio de apertura porque obtengo el precio de apertura y quiero el precio que se desplazó como resultado del promedio.
¡O simplemente a través del historial de pedidos averiguar el precio del primer y segundo pedido y ya en base a estos datos hacer la media, no quiero de esta manera es demasiado complicado para mí!
Estimados señores, ¡¡¡ayúdenme!!! Ya se está desanimando en el último paso, a partir de una estrategia preparada. No se puede promediar un comercio, a través de
Estoy tratando de promediar un intercambio. Pero en los parámetros.
No puedo determinar el precio de apertura porque obtengo el precio de apertura y quiero el precio que se desplazó como resultado del promedio.
¡O simplemente a través del historial de pedidos averiguar el precio del primer y segundo pedido y ya en base a estos datos hacer la media, no quiero de esta manera es demasiado complicado para mí!
Hola, por favor, aclare una cosa.
Por ejemplo, tenemos un EA con el evento OnTick, que abrirá o cerrará una posición dependiendo de las condiciones. Puede probar el EA en el probador de estrategias donde puede establecer el marco de tiempo. No veo cómo están interrelacionados. ¿No es el EA probado en el Probador de Estrategias, y reacciona a cada tick? ¿O sólo reacciona al marco temporal seleccionado en el Probador de Estrategias? Espero que esta pregunta sea clara