Спрашивайте! - страница 31

 
if (FirstRun==1) {

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!

Дэйв <<<