bool isCloseLastPosByTake(string sy="", int op=-1, int mn=-1) {
datetime t;
double ocp, otp;
int dg, i, j=-1, k=OrdersHistoryTotal();
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (t<OrderCloseTime()) {
t=OrderCloseTime();
j=i;
}
}
}
}
}
}
}
if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) { // !!!!!!!!?????? ХОТЬ КТО-ТО МОЖЕТ ОБЪЯСНИТЬ ЗНАЧЕНИЕ СТРОК КОДА, КОТОРЫЕ НАЧИНАЮТСЯ С ЭТОГО МЕСТА?
dg=MarketInfo(sy, MODE_DIGITS);
if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
ocp=NormalizeDouble(OrderClosePrice(), dg);
otp=NormalizeDouble(OrderTakeProfit(), dg);
if (ocp==otp) return(True);
}
return(False);
bool isCloseLastPosByTake(string sy="", int op=-1, int mn=-1) {
datetime t;
double ocp, otp;
int dg, i, j=-1, k=OrdersHistoryTotal();
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (t<OrderCloseTime()) {
t=OrderCloseTime();
j=i;
}
}
}
}
}
}
}
// !!!!!!!!?????? ХОТЬ КТО-ТО МОЖЕТ ОБЪЯСНИТЬ ЗНАЧЕНИЕ СТРОК КОДА, КОТОРЫЕ НАЧИНАЮТСЯ С ЭТОГО МЕСТА?if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {// Если очередной ордер истории торгов выбран, то
dg=MarketInfo(sy, MODE_DIGITS);// переменная dg принимет значение дигитса по валютной паре, имя которой лежит в переменной sy// далее я возможно не верно расставил приоритет скобок, но по сути должно быть так:if (dg==0){// если дигитс равен нулю, тоif(StringFind(OrderSymbol(),"JPY")<0){// если в имени инструмента ордера найдена подстрока то (только это не правильно написано - функция может верноуть значение > 1)
dg=4;// дигитс принимает значение = 4
}
else{// иначе
dg=2;// дигитс принимает значение = 2
}
}
ocp=NormalizeDouble(OrderClosePrice(), dg);// нормализация цены закрытия ордера
otp=NormalizeDouble(OrderTakeProfit(), dg);// нормализация цены ТейкПрофита ордераif (ocp==otp) return(True);
}
return(False);// команда вернуть из подпрограммы значение "ложь"
}
bool isCloseLastPosByTake(string sy="", int op=-1, int mn=-1) { datetime t; double ocp, otp; int dg, i, j=-1, k=OrdersHistoryTotal();
if (sy=="0") sy=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { if (OrderSymbol()==sy || sy=="") { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (op<0 || OrderType()==op) { if (mn<0 || OrderMagicNumber()==mn) { if (t<OrderCloseTime()) { t=OrderCloseTime(); j=i; } } } } } } } // !!!!!!!!?????? ХОТЬ КТО-ТО МОЖЕТ ОБЪЯСНИТЬ ЗНАЧЕНИЕ СТРОК КОДА, КОТОРЫЕ НАЧИНАЮТСЯ С ЭТОГО МЕСТА? if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {// Если очередной ордер истории торгов выбран, то dg=MarketInfo(sy, MODE_DIGITS);// переменная dg принимет значение дигитса по валютной паре, имя которой лежит в переменной sy // далее я возможно не верно расставил приоритет скобок, но по сути должно быть так: if (dg==0){// если дигитс равен нулю, то if(StringFind(OrderSymbol(),"JPY")<0){// если в имени инструмента ордера найдена подстрока то (только это не правильно написано - функция может верноуть значение > 1) dg=4;// дигитс принимает значение = 4 } else{// иначе dg=2;// дигитс принимает значение = 2 } } ocp=NormalizeDouble(OrderClosePrice(), dg);// нормализация цены закрытия ордера otp=NormalizeDouble(OrderTakeProfit(), dg);// нормализация цены ТейкПрофита ордера if (ocp==otp) return(True); } return(False);// команда вернуть из подпрограммы значение "ложь" }
Не знаю можно ли - по-замыслу автора (ну, мне так видится) этот участок кода предназначен для автоматического определения дигитса - ну чтоб код мог определиться точно, до скольких цифр после запятой нужно вести округление цен. Только участок этот бестолково сделан.
Вопрос к начальнику CodeBase. Я оправил туда 3 публикации (плюс 3 на английском). Одна из них была отправлена 18 июля и не опубликована. В начале, когда высылал туда коды, они появлялись в течение 3-4 дней. Сейчас не понятно будут ли новые опубликованы или нет. Хотелось бы узнать если, например материал слабоват и по мнению начальника не стоит их в CodeBase пихать, то получу ли я какое-то сообщение, что они не появятся, потом например будут удалены из заявки? Если бы я узнал что они не опубликуются, то я подготовил бы публикацию по-другому, более расширенно. Есть ли какое-то среднее время на ожидание публикации?
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Пацаны, кто с Пятёрой - дружен. Гляньте, плз, мой индик к чемпу. Затык - никак не могу решить...
Перевод с 4-ки на пятёрку - там на форуме - тишина. Выложил код в ветвь - на эту страницу. Описание - на предыдущей.
Благодарю.
bool isCloseLastPosByTake(string sy="", int op=-1, int mn=-1) {
datetime t;
double ocp, otp;
int dg, i, j=-1, k=OrdersHistoryTotal();
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (t<OrderCloseTime()) {
t=OrderCloseTime();
j=i;
}
}
}
}
}
}
}
// !!!!!!!!?????? ХОТЬ КТО-ТО МОЖЕТ ОБЪЯСНИТЬ ЗНАЧЕНИЕ СТРОК КОДА, КОТОРЫЕ НАЧИНАЮТСЯ С ЭТОГО МЕСТА?
if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {// Если очередной ордер истории торгов выбран, то
dg=MarketInfo(sy, MODE_DIGITS);// переменная dg принимет значение дигитса по валютной паре, имя которой лежит в переменной sy
// далее я возможно не верно расставил приоритет скобок, но по сути должно быть так:
if (dg==0){// если дигитс равен нулю, то
if(StringFind(OrderSymbol(),"JPY")<0){// если в имени инструмента ордера найдена подстрока то (только это не правильно написано - функция может верноуть значение > 1)
dg=4;// дигитс принимает значение = 4
}
else{// иначе
dg=2;// дигитс принимает значение = 2
}
}
ocp=NormalizeDouble(OrderClosePrice(), dg);// нормализация цены закрытия ордера
otp=NormalizeDouble(OrderTakeProfit(), dg);// нормализация цены ТейкПрофита ордера
if (ocp==otp) return(True);
}
return(False);// команда вернуть из подпрограммы значение "ложь"
}
спасибо, а что такое дигитс?
Знаковость торгового инструмента - сколько у него там циферок после запятой.
Знаковость торгового инструмента - сколько у него там циферок после запятой.
то есть, если я знаю, что цифр 4, то код можно сократить так?:
int dg = 4;
............код
if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
ocp=NormalizeDouble(OrderClosePrice(), dg);// нормализация цены закрытия ордераotp=NormalizeDouble(OrderTakeProfit(), dg);// нормализация цены ТейкПрофита ордера
if (ocp==otp) return(True);
}
return(False);
}
Скажите, пожалуйста, есть-ли индикатор, считающий общее количество открытых ордеров по всем задействованным, в процесс торговли, парам?