Как кодировать? - страница 289

 

Нужна помощь в доработке советника

Я пытаюсь написать советника (используя некоторые уже созданные коды), который делает следующее:

  • Открывает два отложенных ордера, sell stop и buy stop, в определенное время (в данном случае 23:00), оба с SL и TP.
  • Истекает отложенный ордер в определенное время (например, в 10:00) и не открывает никаких сделок в пятницу 23:00.
  • Если открыты две сделки и одна из них достигает SL, то у другой TP увеличивается до определенного значения (думаю, что OrderModify решит подобную задачу).
  • Открытые сделки автоматически закрываются до 23:00 следующего дня.
  • Советник почти готов и некоторые предыдущие проблемы, которые у меня были, были решены, и он делает большинство из вышеперечисленного, но у меня все еще есть следующие проблемы, и на данный момент я не знаю, как двигаться дальше, поэтому, если кто-то может предоставить необходимый код, это было бы очень полезно.

  • Когда две сделки открыты и одна из них сбивает стоплосс, мне нужно, чтобы у другой сделки, которая все еще открыта, тейк-профит был увеличен на определенную сумму.
  • Сделки все еще открываются в пятницу 23:00, чего я не хочу.
  • Любые сделки, которые все еще открыты к 23:00, должны быть закрыты, независимо от того, в убытке они или в прибыли.

Я новичок в MQL, и я пытался искать решения некоторых из вышеперечисленных проблем, но у меня возникли трудности с их поиском. Я считаю, что эти проблемы могут быть решены довольно легко и не требуют сложного кодирования. Если кто-нибудь может предоставить мне решение или решения для любой из вышеперечисленных проблем, я буду еще раз очень признателен.

Спасибо,

madmax3

 

...

Попробуйте сделать что-то вроде этого:

if((CurrentPriceBuy>UpperPriceTrigger) && TakeAction==1)

{

int ticketBuy = OrderSend(Sym,OP_BUY,Lots,CurrentPriceBuy,0,0,0,Co mm,0,0,CLR_NONE);

if (ticketBuy>-1)

OrderModify(ticketBuy,OrderOpenPrice(),stopLossToUse,takeProfitToUse,0,CLR_NONE);

}

Просто замените stopLossToUse и takeLossToUse значениями, которые вы хотите получить.

kasio:
Друзья,

Я новичок в программировании на MQL4 и мне нужна помощь в прикреплении SL и TP к ORDERSEND с ECN брокером.

Изначально я не мог понять, почему SL и TP приводят к ошибке, пока кто-то не указал, что необходимо установить поля StopLoss и TakeProfit в ORDERSEND на "0", иначе ECN/STP брокер не выполнит ордер.

Итак, мой вопрос: как я могу исполнить ордер на рынке, а затем немедленно (или в течение секунды или двух) прикрепить SL/TP к этому тикету?

Вот часть кода, относящаяся к моему вопросу:

if((CurrentPriceBuy>UpperPriceTrigger) && TakeAction==1)

{

OrderSend(Sym,OP_BUY,Lots,CurrentPriceBuy,0,0,0,0,Comm,0,0,CLR_NONE);

TakeAction=0;

}

Может ли кто-нибудь помочь мне вставить код сразу после команды OrderSend, чтобы я мог прикрепить TP/SL, скажем, произвольно 25 пунктов к этому конкретному тикету?

Любая помощь будет очень признательна. Заранее спасибо.

С уважением,

Касио
 

помогите!

кто-нибудь может помочь мне сделать так, чтобы этот индикатор не перерисовывался, пожалуйста?

Файлы:
pi_bg_v2.mq4  3 kb
 

...

Это декомпилированный код, но в любом случае посмотрите на эту тему: https: //www.mql5.com/en/forum/179650

Это еще один переименованный солнечный ветер, так что ...

phoenix:
кто-нибудь может помочь мне сделать этот индикатор не перерисовывающимся, пожалуйста?
 

Есть идеи, как закодировать то, что я написал? Прошу прощения, если я нетерпелив или что-то в этом роде, просто хочу знать, было ли это прочитано.

Спасибо,

madmax3

 

...

Добавьте что-то вроде этого в ваш советник в начале процедуры start() :
if (TimeDayOfWeek(TimeCurrent())==5 && TimeCurrent()>=StrToTime("22:59")) { CloseAll(); return(0); } [/PHP]

Добавьте это в код:

[PHP]void CloseAll()

{

for(int cnt=OrdersTotal()-1;cnt>=0;cnt--)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if (OrderMagicNumber()!=MagicNumber) continue;

//

//

//

//

// //

if (OrderType()==OP_BUY || OrderType()==OP_SELL)

{

for(int c=0; c<3; c++)

{

RefreshRates();

if (OrderType()==OP_BUY)

{ double cp = Bid;}

else { cp = Ask;}

OrderClose(OrderTicket(),OrderLots(),cp,0,Yellow);

int err=GetLastError();

if(err==4 || err==136 || err==137 || err==138 || err==146)

{

Sleep(5000); continue;

}

break;

}

break; } break;

}

}

}

} } }

Это решит ваши пункты 2 и 3 (открытые ордера в пятницу).

Первый пункт довольно сложен в коде - вероятно, вам придется переопределить это правило.

madmax3:
Есть идеи, как закодировать то, что я написал? Прошу прощения, если я нетерпелив или что-то в этом роде, просто хочу знать, было ли это прочитано.

Спасибо,

madmax3
 

Пожалуйста, помогите! Номер ошибки = 4103. pos = 10. Невозможно открыть файл

Здравствуйте,

Я новичок здесь и новичок в программировании MT. Может ли кто-нибудь помочь мне в этом?

Я получил сообщение "Произошла ошибка. Номер ошибки = 4103. позиция = 10 (невозможно открыть файл)".

Файл сохраняется правильно как gif, но я получаю вышеуказанное сообщение. В чем проблема?

Код:

void Screenshot(int ticket, int cmd, datetime orderOpenTime, double orderOpenPrice)

{

RefreshRates();

if (cmd==OP_BUY) Comment (DateTimeInfo(),"\n", "Order Open Time: ",TimeToStr(orderOpenTime,TIME_DATE|TIME_SECONDS), "Buy: ",DoubleToStr(orderOpenPrice,Digits)) ;

if (cmd==OP_SELL) Comment (DateTimeInfo(),"\n", "Время открытия ордера: ",TimeToStr(orderOpenTime,TIME_DATE|TIME_SECONDS), "Sell: ",DoubleToStr(orderOpenPrice,Digits)) ;

string filename = Symbol()+"_"+"Demo "+"_"+ticket+"_Open.gif";

int handle = FileOpen(filename,FILE_CSV|FILE_READ);

if(handle<1)

{

if (GlobalVariableGet("_MonitorScreen_ScreenShot") != 0 )

{

if(!WindowScreenShot(filename,900,600)) Print("Ошибка WindowScreenShot: "+GetLastError());

}

}

else FileClose(handle);

}

Любая помощь будет принята с благодарностью. Спасибо.

 

...

Все работает нормально

Файл должен находиться в подпапке experts\files, и я использовал в качестве примера билет номер 0, поэтому полное имя файла было в моем примере "EURUSD_Demo_0_Open.gif", и он открыл его без проблем (он делает это нормально, если вы используете FILE_CSV, а также FILE_BIN). Таким образом, если он сохранен в правильной папке и с правильным именем, ваш код работает нормально.

Akkinmore:
Привет,

Я здесь новичок и новичок в программировании MT. Может ли кто-нибудь помочь мне в этом?

Я получил "Произошла ошибка. Номер ошибки = 4103. позиция = 10 (невозможно открыть файл)".

Файл сохраняется правильно как gif, но я получаю вышеуказанное сообщение. В чем проблема?

Код:

void Screenshot(int ticket, int cmd, datetime orderOpenTime, double orderOpenPrice)

{

RefreshRates();

if (cmd==OP_BUY) Comment (DateTimeInfo(),"\n", "Order Open Time: ",TimeToStr(orderOpenTime,TIME_DATE|TIME_SECONDS), "Buy: ",DoubleToStr(orderOpenPrice,Digits)) ;

if (cmd==OP_SELL) Comment (DateTimeInfo(),"\n", "Время открытия ордера: ",TimeToStr(orderOpenTime,TIME_DATE|TIME_SECONDS), "Sell: ",DoubleToStr(orderOpenPrice,Digits)) ;

string filename = Symbol()+"_"+"Demo "+"_"+ticket+"_Open.gif";

int handle = FileOpen(filename,FILE_CSV|FILE_READ);

if(handle<1)

{

if (GlobalVariableGet("_MonitorScreen_ScreenShot") != 0 )

{

if(!WindowScreenShot(filename,900,600)) Print("Ошибка WindowScreenShot: "+GetLastError());

}

}

else FileClose(handle);

}

Любая помощь будет принята с благодарностью. Спасибо.
 
mladen:
Все работает нормально Файл должен находиться в подпапке experts\files, я использовал в качестве примера билет номер 0, поэтому полное имя файла было в моем примере "EURUSD_Demo_0_Open.gif" и он открыл его без проблем (он делает это нормально, если вы используете FILE_CSV так же, как и FILE_BIN). Итак, если файл сохранен в правильной папке и с правильным именем, ваш код работает нормально.

Спасибо. Да, файл сохранен в правильной папке и с правильным именем. Я могу попробовать использовать FILE_BIN вместо FILE_CSV, чтобы проверить, появится ли сообщение об ошибке снова.

 

...

Как заставить мой компьютер правильно показывать слова на русском языке в индикаторах?...Спасибо...

Причина обращения: