Чтобы было понятней давайте расшифруем всё по-порядку
#property strict void Trailing(int Magic_to_function, string Symbol_Curent ,int Dist_to_function, int Shag_to_function, bool Isp_shag, bool Bezubitok) { double dist; double shag; if (Digits==3 || Digits==5){dist=Dist_to_function*10*Point; shag=Shag_to_function*10*Point;} else if (Digits==2 || Digits==4){dist=Dist_to_function*Point; shag=Shag_to_function*Point;}
1. Объявили переменные без явной инициализации
2. Присваивается значение этим переменным только при условии 1 или 2
Соответственно в случае не выполнения этих условий переменные так и останутся не инициализированными… О чём и предупреждает компилятор.
Я-бы написал так, учитывая что это, как мне кажется, для мультивалютника…
#property strict void Trailing(int Magic_to_function, string Symbol_Curent ,int Dist_to_function, int Shag_to_function, bool Isp_shag, bool Bezubitok) { double sp = MarketInfo(Symbol_Curent, MODE_POINT); double dist = Dist_to_function*sp; double shag = Shag_to_function*sp; if(Digits == 3 || Digits == 5) // или лучше if(Digits % 2 == 1) { dist = Dist_to_function*10*sp; shag = Shag_to_function*10*sp; } // и дальше по тексту }
-
#8 901
double LOTHIS()
{
double hislot;
for(int y=0; y<=OrdersHistoryTotal()-1; y++)
{
if(OrderSelect(y, SELECT_BY_POS,MODE_HISTORY)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)//Выбираем ордер
{
}
}
return(hislot);
}
//##
Почему выдает эту ошибку:
possible use of uninitialized variable ‘hislot’ Umr3.mq4 162 11
Ведь я проинициализировал в самой функции.
-
#8 902
double LOTHIS() { double hislot; for(int y=0; y<=OrdersHistoryTotal()-1; y++) { if(OrderSelect(y, SELECT_BY_POS,MODE_HISTORY)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)//Выбираем ордер { } } return(hislot); } //##
Почему выдает эту ошибку:
possible use of uninitialized variable ‘hislot’ Umr3.mq4 162 11Ведь я проинициализировал в самой функции.
А, если не было в истории ни одного ордера с указанным меджиком и символом — какое значение должна вернуть ф-ция ???
-
#8 903
при такой записи
extern int StopLoss = 250;//Фиксированный уровень стопа
extern int TakeProfit = 500;//Фиксированный уровень профита
int coeff,intBars;
//+------------------------------------------------------------------+
int OnInit(){
if(MarketInfo(Symbol(),MODE_DIGITS)==5)
coeff = 10;
if(MarketInfo(Symbol(),MODE_DIGITS)==3)
coeff = 10;
StopLoss *= coeff;
TakeProfit*= coeff;
}
если Digits() не равен 3 или 5, допустим он равен 2 или 1, то чему будет равен StopLoss и TakeProfit ?
-
#8 904
void OnTick()
{
if(OrdersTotal()==0)
{
uo(svecha);
ue(sltp);
if(svecha[4][1]<0 && svecha[4][2]<0 && svecha[4][3]<0)
Print(Bid-sltp[0]*Point);
ticketss=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage,Bid-sltp[0]*Point,0,"S1 buy",Magic,clrNONE);
if(svecha[4][1]>0 && svecha[4][2]>0 && svecha[4][3]>0)
ticketss=OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,Ask+sltp[0]*Point,0,"S1 sell",Magic,clrNONE);
}
}
//+------------------------------------------------------------------+
//| User function |
//+------------------------------------------------------------------+
void ue(double &gh2[3])//Значения стопп и профита sltp[2];
{
gh2[0]=NormalizeDouble(StopLoss*Point,Digits);//Фиксирование убытков
gh2[1]=NormalizeDouble(TakeProfit*Point,Digits);//Фиксирование приболи
gh2[2]=NormalizeDouble(MarketInfo(Symbol(),MODE_FREEZELEVEL),Digits);//Минимальный стоплос и профит
gh2[3]=NormalizeDouble(MarketInfo(Symbol(),33),Digits);//Минимальный лот
};
//###############################################################################
void uo(double &gh[10][31])//Массив свечей svecha[10][31];
{
for(int i = 0; i < ArrayRange(gh, 1); i++)
{
gh[0][i] = Open[i];//Открытие свечи
gh[1][i] = Close[i];//Закрытие свечи
gh[2][i] = High[i];//Макс свечи
gh[3][i] = Low[i];//Мин свечи
gh[4][i] = Open[i]-Close[i];//Тело свечи
gh[5][i] = High[i]-Low[i];//Высота свечи
gh[6][i] = High[i]-Open[i];//верхняя тень черной свечи
gh[7][i] = High[i]-Close[i];//Верхняя тень белой свечи
gh[8][i] = Open[i]-Low[i];//Нижняя тень белой свечи
gh[9][i] = Close[i]-Low[i];//Нижняя тень черной свечи
}
};
//+------------------------------------------------------------------+
Весь код. Не понимаю что не так.
-
#8 905
при такой записи
extern int StopLoss = 250;//Фиксированный уровень стопа extern int TakeProfit = 500;//Фиксированный уровень профита int coeff,intBars; //+------------------------------------------------------------------+ int OnInit(){ if(MarketInfo(Symbol(),MODE_DIGITS)==5) coeff = 10; if(MarketInfo(Symbol(),MODE_DIGITS)==3) coeff = 10; StopLoss *= coeff; TakeProfit*= coeff; }
если Digits() не равен 3 или 5, допустим он равен 2 или 1, то чему будет равен StopLoss и TakeProfit ?
if(MarketInfo(Symbol(),MODE_DIGITS)==2)
coeff = 10;
if(MarketInfo(Symbol(),MODE_DIGITS)==1)
coeff = 10
-
#8 906
if(MarketInfo(Symbol(),MODE_DIGITS)==2)
coeff = 10;
if(MarketInfo(Symbol(),MODE_DIGITS)==1)
coeff = 10
А если 0 или 6, то тогда что? Распиши уже на все случаи жизни, чтобы ни ку кого не возникало больше вопросов.
-
#8 907
void OnTick() { if(OrdersTotal()==0) { uo(svecha); ue(sltp); if(svecha[4][1]<0 && svecha[4][2]<0 && svecha[4][3]<0) Print(Bid-sltp[0]*Point); ticketss=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage,Bid-sltp[0]*Point,0,"S1 buy",Magic,clrNONE); if(svecha[4][1]>0 && svecha[4][2]>0 && svecha[4][3]>0) ticketss=OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,Ask+sltp[0]*Point,0,"S1 sell",Magic,clrNONE); } } //+------------------------------------------------------------------+ //| User function | //+------------------------------------------------------------------+ void ue(double &gh2[3])//Значения стопп и профита sltp[2]; { gh2[0]=NormalizeDouble(StopLoss*Point,Digits);//Фиксирование убытков gh2[1]=NormalizeDouble(TakeProfit*Point,Digits);//Фиксирование приболи gh2[2]=NormalizeDouble(MarketInfo(Symbol(),MODE_FREEZELEVEL),Digits);//Минимальный стоплос и профит gh2[3]=NormalizeDouble(MarketInfo(Symbol(),33),Digits);//Минимальный лот }; //############################################################################### void uo(double &gh[10][31])//Массив свечей svecha[10][31]; { for(int i = 0; i < ArrayRange(gh, 1); i++) { gh[0][i] = Open[i];//Открытие свечи gh[1][i] = Close[i];//Закрытие свечи gh[2][i] = High[i];//Макс свечи gh[3][i] = Low[i];//Мин свечи gh[4][i] = Open[i]-Close[i];//Тело свечи gh[5][i] = High[i]-Low[i];//Высота свечи gh[6][i] = High[i]-Open[i];//верхняя тень черной свечи gh[7][i] = High[i]-Close[i];//Верхняя тень белой свечи gh[8][i] = Open[i]-Low[i];//Нижняя тень белой свечи gh[9][i] = Close[i]-Low[i];//Нижняя тень черной свечи } }; //+------------------------------------------------------------------+
Весь код. Не понимаю что не так.
А в такой записи стопы ставяться что -не так не пойму?
void OnTick()
{
if(OrdersTotal()==0)
{
ticketss=OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,Ask+StopLoss*Point,0,"S1 sell",Magic,clrNONE);
}
}
-
#8 908
Добрый день знатокам, помогите написать индикатор. Сам, ну очень далек от программирования. условия очень простые, не займет много времени.
Берем бар, находим середину бара через хай и лоу. если уровень открытия и закрытия находится в нижней половине бара — то это бар на продажу. на покупку открытие и закрытие должно быть в верхней половине. удовлетворяющий условиям бар нужно подкрасить и стрелку добавить.
Помогите кому не трудно, буду очень признателен.
-
#8 909
if(MarketInfo(Symbol(),MODE_DIGITS)==2)
coeff = 10;
if(MarketInfo(Symbol(),MODE_DIGITS)==1)
coeff = 10
если переменная coeff везде равна 10, то почему бы сразу так не записать
или без переменной coeff
StopLoss *= 10;
TakeProfit*= 10;
или сразу так
extern int StopLoss = 2500;//Фиксированный уровень стопа
extern int TakeProfit = 5000;//Фиксированный уровень профита
вот пример
int coeff = 1; // задай стартовое значение (инициализируй), может меньше условий придётся писать
long dig = SymbolInfoInteger(symbol,SYMBOL_DIGITS); // для другого графика, для текущего достаточно Digits()
// тут не забудь про фильтры, к какой группе относится символ форекс/не форекс (когда будет актуально разберёшься ))
if(dig == 3 || dig == 5)coeff = 10;
-
#8 910
А в такой записи стопы ставяться что -не так не пойму?
если не понятно, значит ошибка в таком месте, где даже не ждал, что она там будет.
тот же самый алгоритм действий: принтуй значения стопов от выставления ордера до их объявления.
если всё везде правильно, но стопы не выставляются, то проверь тип счёта может это ECN
Весь код. Не понимаю что не так.
скобки забываешь ставить после условий, может когда добавляешь принты
-
#8 911
Добрый день знатокам, помогите написать индикатор. Сам, ну очень далек от программирования. условия очень простые, не займет много времени.
Берем бар, находим середину бара через хай и лоу. если уровень открытия и закрытия находится в нижней половине бара — то это бар на продажу. на покупку открытие и закрытие должно быть в верхней половине. удовлетворяющий условиям бар нужно подкрасить и стрелку добавить.
Помогите кому не трудно, буду очень признателен.
Подобные просьбы размещают в Бесплатное написание программ или в Предложения по автоматизации торговли.
А здесь задают вопросы по языку программирования те кто сам пишет и чего то не понял.
-
#8 912
Привет. Ребята, что вписать в код индикатора чтобы он ставился на график много раз при смене настроек, а непереставлялся только с новыми ???
И другой вопрос, чтобы убирал за собой линии и т.д.
griz
Активный участник
-
#8 913
чтобы он ставился на график много раз при смене настроек, а непереставлялся только с новыми ???
Т.е. в настройках индикатора меняешь параметры, и на графике каждый раз (при изменении параметров) создаются новые версии этого индикатора, как бы каждая версия со своими параметрами, я правильно понял?
-
#8 914
почему после нормализации все равно выдает:
2022.11.06 20:10:49.998 2004.04.13 00:00:46 Umr3 AUDCAD,H4: ДЛя открытия сделок Бай=SL=0.9844000000000001=TP=1.061=ASK=1.011=BID=1.0094
-
#8 915
Т.е. в настройках индикатора меняешь параметры, и на графике каждый раз (при изменении параметров) создаются новые версии этого индикатора, как бы каждая версия со своими параметрами, я правильно понял?
Да,все так.
griz
Активный участник
-
#8 916
почему после нормализации все равно выдает:
2022.11.06 20:10:49.998 2004.04.13 00:00:46 Umr3 AUDCAD,H4: ДЛя открытия сделок Бай=SL=0.9844000000000001=TP=1.061=ASK=1.011=BID=1.0094
допиши:
string SL_2 = DoubleToString(SL,Digits);
Print("SL_2=",SL_2);
-
#8 917
допиши:
string SL_2 = DoubleToString(SL,Digits); Print("SL_2=",SL_2);
Мне потом в ордер сенд вставлять нужно.
griz
Активный участник
-
#8 918
Т.е. в настройках индикатора меняешь параметры, и на графике каждый раз (при изменении параметров) создаются новые версии этого индикатора, как бы каждая версия со своими параметрами, я правильно понял?
Вроде так нельзя делать. Тут нужно разрабатывать индюк, чтобы он мог создавать свои дубли с настраиваемыми параметрами.
-
#8 919
И другой вопрос, чтобы убирал за собой линии и т.д.
если совсем простенький вариант, то добавь это
//+------------------------------------------------------------------+
void OnDeinit(const int reason){
ObjectsDeleteAll(chart_id/*идентификатор графика*/,prefix/*одинаковая не меняющаяся часть названия у объектов*/,sub_window/*номер подокна*/,object_type/*тип объекта*/);
}
если функция OnDeinit в коде уже есть, то в неё просто добавь содержимое из этого примера,
подставь нужные значения (последние два параметра не обязательные)
тут справка -https://docs.mql4.com/ru/objects/objectsdeleteall, возможно оттуда подойдут другие варианты
griz
Активный участник
-
#8 920
Мне потом в ордер сенд вставлять нужно.
в ордер сенд вставляй так:
33 replies
When will be new version Mark? If You are talking about SQ4 then sometimes I even doubt in it’s existency! 😉 we talked last time that SQ4 should be at december 2014. We have July of 2015 😉 can You fix it in existing sq3?
It would be great to see another SQ3 release with the code fixed and a handful of other known bugs fixed.
@Mark – If we collected together a list of high priority known bugs, could you produce another SQ3 release with these in to tide us over until SQ4 is ready?
TIA
Mike
Mike, I’ll surely consider it.
Please compile a list of bugs you think are high priority and should be fixed in the current version 3.
The best is to contact me by private message on forum or by support email then, so I’ll not miss it here on forum.
Mark
StrategyQuant architect
The best is to contact me by private message on forum
Really? 🙂
sorry, I didn’t know about this.
what issue is there with compiler exactly? it works fine for MT4.
code generator for MT5 will be only in the new version, it is quite a lot of work to do it twice.
Mark
StrategyQuant architect
Hard to say. Mql says only that it isnt done with compile strict. Please follow the website that I mentioned. Maybe it will help to solve the problem.
Any update on this, Mark?
Mike, I’ll surely consider it.
Please compile a list of bugs you think are high priority and should be fixed in the current version 3.
The best is to contact me by private message on forum or by support email then, so I’ll not miss it here on forum.
Hi Mark,
I am going to compile a list of bugs and issues I think would be simple to change for a final SQ3 release. I wil then post it on the forum and send it to you.
Many thanks,
Mike
Here’s some issues I think should be fixed and go into final SQ3 release.
I just want to let you know that we just released an autoupdate that fixes this. Your SQ should be updated next time you start it.
So ti is now possible to add #property strict to your EA and it will compile correctly.
Mark
StrategyQuant architect
Ok, I have updated SQ but I see no option to add #property strict.
Where can I find it?
there is no setting for it in SQ, what was changed was that SQ now generates code that can be compiled with #property strict.
You can add the line:
#property strict
to the beginning of generated EA file.
Mark
StrategyQuant architect
Will it work even if I load “old” strategies files and export again in mql?
yes, you can alway re-export old strategies in SQ and they should work as before.
MQL code was just cleaned up so that there are no errors when compiled with #property strict
Mark
StrategyQuant architect
#property strict in actual version SQ 3.8.1 is not. If I add line #property strict and compile to ex4 returns this errors. I instaled lasted SQ 3.8.1 and patches from august and september.
‘EURUSD_15M_21.320229.mq4 EURUSD_15M_21.320229.mq4 1 1
implicit conversion from ‘number’ to ‘string EURUSD_15M_21.320229.mq4 562 83
implicit conversion from ‘number’ to ‘string EURUSD_15M_21.320229.mq4 562 111
implicit conversion from ‘number’ to ‘string EURUSD_15M_21.320229.mq4 605 70
implicit conversion from ‘number’ to ‘string EURUSD_15M_21.320229.mq4 607 71
implicit conversion from ‘number’ to ‘string EURUSD_15M_21.320229.mq4 630 38
implicit conversion from ‘number’ to ‘string EURUSD_15M_21.320229.mq4 630 61
implicit conversion from ‘number’ to ‘string EURUSD_15M_21.320229.mq4 630 83
implicit conversion from ‘number’ to ‘string EURUSD_15M_21.320229.mq4 630 99
implicit conversion from ‘number’ to ‘string EURUSD_15M_21.320229.mq4 635 35
implicit conversion from ‘number’ to ‘string EURUSD_15M_21.320229.mq4 640 26
implicit conversion from ‘number’ to ‘string EURUSD_15M_21.320229.mq4 640 55
implicit conversion from ‘number’ to ‘string EURUSD_15M_21.320229.mq4 653 39
implicit conversion from ‘number’ to ‘string EURUSD_15M_21.320229.mq4 653 57
implicit conversion from ‘number’ to ‘string EURUSD_15M_21.320229.mq4 653 77
implicit conversion from ‘number’ to ‘string EURUSD_15M_21.320229.mq4 655 24
implicit conversion from ‘number’ to ‘string EURUSD_15M_21.320229.mq4 655 57
implicit conversion from ‘number’ to ‘string EURUSD_15M_21.320229.mq4 655 94
implicit conversion from ‘number’ to ‘string EURUSD_15M_21.320229.mq4 658 40
implicit conversion from ‘number’ to ‘string EURUSD_15M_21.320229.mq4 658 54
implicit conversion from ‘number’ to ‘string EURUSD_15M_21.320229.mq4 672 39
implicit conversion from ‘number’ to ‘string EURUSD_15M_21.320229.mq4 672 61
implicit conversion from ‘number’ to ‘string EURUSD_15M_21.320229.mq4 672 94
implicit conversion from ‘number’ to ‘string EURUSD_15M_21.320229.mq4 672 131
implicit conversion from ‘number’ to ‘string EURUSD_15M_21.320229.mq4 676 39
implicit conversion from ‘number’ to ‘string EURUSD_15M_21.320229.mq4 676 77
implicit conversion from ‘number’ to ‘string EURUSD_15M_21.320229.mq4 676 91
implicit conversion from ‘number’ to ‘string EURUSD_15M_21.320229.mq4 684 55
implicit conversion from ‘number’ to ‘string EURUSD_15M_21.320229.mq4 687 46
implicit conversion from ‘number’ to ‘string EURUSD_15M_21.320229.mq4 687 60
‘i’ – undeclared identifier EURUSD_15M_21.320229.mq4 1048 8
‘i’ – undeclared identifier EURUSD_15M_21.320229.mq4 1064 8
‘i’ – undeclared identifier EURUSD_15M_21.320229.mq4 1091 8
‘i’ – undeclared identifier EURUSD_15M_21.320229.mq4 1107 8
implicit conversion from ‘number’ to ‘string EURUSD_15M_21.320229.mq4 1223 19
‘i’ – undeclared identifier EURUSD_15M_21.320229.mq4 1304 8
‘orderTime’ – undeclared identifier EURUSD_15M_21.320229.mq4 1306 10
implicit conversion from ‘string’ to ‘number EURUSD_15M_21.320229.mq4 1306 20
implicit conversion from ‘number’ to ‘string EURUSD_15M_21.320229.mq4 1308 13
possible use of uninitialized variable ‘lotMM EURUSD_15M_21.320229.mq4 1380 15
implicit conversion from ‘number’ to ‘string EURUSD_15M_21.320229.mq4 1788 19
possible loss of data due to type conversion EURUSD_15M_21.320229.mq4 1802 30
possible loss of data due to type conversion EURUSD_15M_21.320229.mq4 1813 22
implicit conversion from ‘number’ to ‘string EURUSD_15M_21.320229.mq4 1815 56
implicit conversion from ‘number’ to ‘string EURUSD_15M_21.320229.mq4 1851 60
implicit conversion from ‘number’ to ‘string EURUSD_15M_21.320229.mq4 1851 87
possible loss of data due to type conversion EURUSD_15M_21.320229.mq4 2117 11
implicit conversion from ‘number’ to ‘string EURUSD_15M_21.320229.mq4 2118 17
possible loss of data due to type conversion EURUSD_15M_21.320229.mq4 2140 65
possible loss of data due to type conversion EURUSD_15M_21.320229.mq4 2141 70
6 error(s), 43 warning(s) 7 44
I’m an enthusiastic content creator with a passion for automated trading strategies (ATS). My love for ATS began in 2011, and I’ve been honing my skills ever since. In 2013, I built my own ATS and later discovered StrategyQuant, a remarkable tool that allows anyone to create ATS without any programming expertise.
I’m also the proud creator of QuantMonitor.net, a unique platform monitoring tool that simplifies your trading experience. My trading dashboard comes with additional tools like the rename tool and EA deployer, making it a breeze to rename and deploy up to 99 strategies in mere clicks.
Join me on this exciting journey as we explore the endless possibilities of automated trading strategies together! 🚀
You must be logged in to reply to this topic.
Sign in
Функция возвращает: если true — по тейку, false — еще как-то. Нажмите лайк и функция откроется.[sociallocker]
bool isCloseLastPosByTake(string sy="", int op=-1, int magic=-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 (OrderMagicNumber() == magic || OrderMagicNumber() == -1) { 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); }
[/sociallocker]
Входные данные:
Sy- символ;
op — тип ордера OP_BUY или OP_SELL (-1 — любой тип);
magic — если -1 ордер с любым магиком или вообще без магика (ручной ордер).
Вот и все. Приятных вам функций!
Поделись с друзьями:
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
- Pick a username
- Email Address
- Password
By clicking “Sign up for GitHub”, you agree to our terms of service and
privacy statement. We’ll occasionally send you account related emails.
Already on GitHub?
Sign in
to your account