Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
FirstRun=0;
prevtime=Time[0];
}
if ((prevtime == Time[0]) && (CurTime()-prevtime)>MaxTradeTime) {
NewBar=0;
}
else {
prevtimeЯ нашел это! Буду делать это в будущем - Мы учимся с помощью других, у которых больше знаний и мудрости, чем у нас, в областях нашего непонимания! Большое спасибо!
for (int cnt1=OrdersTotal()-1;cnt1>=0;cnt1--)
OrderSelect(cnt1, SELECT_BY_POS, MODE_TRADES);
if (OrderType()>=OP_SELL && OrderSymbol()==Symbol() && (OrderMagicNumber () == MagicNumber || MagicNumber==0))
{
if(OrderOpenPrice()-Ask>=TrailingStop*Point)
{
if(OrderStopLoss()>Ask+Point*15||OrderStopLoss()==0)
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+(15 *Point),Bid-(20*Point),Cyan); //Modify stop loss and take profit
}
return(0);
}
if (OrderType()>=OP_BUY && OrderSymbol()==Symbol() && (OrderMagicNumber () == MagicNumber || MagicNumber==0))
{
if(Bid-OrderOpenPrice()>=TrailingStop*Point)
{
if(OrderStopLoss()<Bid-Point*15 ||OrderStopLoss()==0)
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-(15*Point),Ask+(20*Point),Cyan); //Modify stop loss and take profit
}
return(0);
}
return(0);
}
}С правильным форматом сейчас, не мог бы один из вас, очень щедрых кодеров, помочь мне решить эту проблему SL и TP выше. Вернемся к моей первоначальной просьбе. Моя программа сна деактивирует советника в разное время. До перехода в спящий режим советник создавал открытые сделки со стоп-лоссом 40-50 пунктов и тейк-профитом 100. Непосредственно перед тем, как советник будет переведен в спящий режим, я хочу, чтобы стоплосс на каждом открытом тикете изменился на 15 пунктов, а тейкпрофит - на 25 пунктов. Стоплосс не должен быть трейлинг-стопом, а жестким стопом ниже (покупка) или выше (продажа) его текущей торговой цены (так же как и тейк-профит). Одолжите мне свой опыт и сделайте мой день!!!
Для трейлингстопов используйте следующую функцию. Я думаю, что она написана так, чтобы ее можно было легко понять. Иногда программисты пишут код, который может быть эффективным на доли миллисекунды, но делает его чертовски сложным для чтения и отладки.
void TrailingAlls(int start,int stop)
{
int profit;
double stoptrade;
double stopcal;
if(stop==0)
return;
int trade;
for(trade=OrdersTotal()-1;trade>=0;trade--)
{
if(!OrderSelect(trade,SELECT_BY_POS,MODE_TRADES))
continue;
if(OrderSymbol()!=Symbol()||OrderMagicNumber()!=MagicNumber)
continue;
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
if(OrderType()==OP_BUY)
{
profit=NormalizeDouble((Bid-OrderOpenPrice())/Point,0);
if(profit<start)
continue;
stoptrade=OrderStopLoss();
stopcal=Bid-(stop*Point);
if(stoptrade==0||(stoptrade!=0&&stopcal>stoptrade))
OrderModify(OrderTicket(),OrderOpenPrice(),stopcal,OrderTakeProfit(),0,Blue);
}//Long
if(OrderType()==OP_SELL)
{
profit=NormalizeDouble((OrderOpenPrice()-Ask)/Point,0);
if(profit<start)
continue;
stoptrade=OrderStopLoss();
stopcal=Ask+(stop*Point);
if(stoptrade==0||(stoptrade!=0&&stopcal<stoptrade))
OrderModify(OrderTicket(),OrderOpenPrice(),stopcal,OrderTakeProfit(),0,Red);
}//Shrt
}
}//for
}
Вызовите его в своем старте, используя следующее:
TrailingAlls(TrailStartPips,TrailStopPips);
Маджи, в моем коде (который неправильный). Мне не нужны трейлинг-стопы. Я просто хочу, чтобы открытые тикеты были изменены таким образом, чтобы каждая открытая покупка и продажа имела жесткий стоп-лосс в 15 пунктов и жесткий тейк-профит в 25 пунктов от текущей цены валюты.
Мне нужно, чтобы он искал, что открыто, что относится к символу валюты, а затем изменял стоп-лосс и тейк-профит для каждой открытой сделки. Это все, что мне нужно.
Вчера вечером мы отклонились от темы и перешли к трейлинг-стопам - недопонимание между мной и Phoenix.
Пожалуйста, помогите мне выполнить эту не слишком сложную функцию - Для вас, то есть!
Дэйв,
Я думаю, что ингредиенты для внесения этого изменения есть в программе, которую я вам дал.
В противном случае вам придется опубликовать свой код или отправить его мне по электронной почте, и я смогу посмотреть, что можно сделать. Иногда очень трудно читать чужой код, поэтому это может занять много времени. В этом случае я не буду опускать руки.
Удачи.
Пост #309 - это мой код в его нынешнем виде, на PHP.
Нужно только изменить открытые сделки на жесткий стоп-лосс 15 и жесткий тейк-профит 25. Для такого профессионала, как вы, не должно быть слишком много работы по изменению этого кода.
Дэйв,
Как я уже сказал, внесение таких правок отнимает много времени. Я играю в свой обеденный перерыв и вот попытка. Если это не сработает, вы сами справитесь. Это не проверено, так что...
Вызовите это в вашей основной программе непосредственно перед тем, как вы прикажете программе заснуть.
Удачи.
void ChangeStop(int takeprofit,int stop)
{
double profit;
double stopcal;
if(stop==0)
return;
int trade;
for(trade=OrdersTotal()-1;trade>=0;trade--)
{
if(!OrderSelect(trade,SELECT_BY_POS,MODE_TRADES))
continue;
if(OrderSymbol()!=Symbol()||OrderMagicNumber()!=MagicNumber)
continue;
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
if(OrderType()==OP_BUY)
{
profit=Ask+(takeprofit*point);
stopcal=Bid-(stop*Point);
OrderModify(OrderTicket(),OrderOpenPrice(),stopcal,profit,0,Blue);
}//Long
if(OrderType()==OP_SELL)
{
profit=Bid-(takeprofit*point);
stopcal=Ask+(stop*Point);
OrderModify(OrderTicket(),OrderOpenPrice(),stopcal,profit,0,Red);
}//Shrt
}
}//for
}
Где здесь происходит модификация? Первоначально стоп-лосс был 40, а тейк-профит - 100. В рамках спящего режима стоп-лосс должен измениться на 15 для всех существующих открытых ордеров, а тейк-профит - на 25 для всех существующих открытых ордеров.
Билеты открытых ордеров: До спящего режима.
До спящего режима стоп-лосс - 40 До спящего режима тейк-профит-100 После спящего режима модификация стоп-лосса -15 После спящего режима модификация тейк-профита - 25
Я не инициализирую настройки ордеров, я модифицирую существующие ордера, уже размещенные и все еще активные.
В любом случае, спасибо за помощь! Почему что-то такое простое кажется таким сложным?
Дэйв,
Это не сложно. Вам придется изучить MQ немного больше. Проверьте код, который я предоставил. Параметры, стоп и тейкпрофит должны быть теми числами, которые вы хотите использовать.
Там все есть, вам нужно будет понять, как это использовать.
Я бросаю полотенце. Я получаю ошибки. Я буду использовать то, что предоставил Phoenix, потому что это работает в той степени, с которой я могу жить. Если бы у этого языка была школа, в которой можно было бы учиться в Соединенных Штатах, это, конечно, облегчило бы мне жизнь. К сожалению, такой школы нет.
Спасибо за помощь, как Maji, так и Phoenix!