К автору индикатора уже обращались?
i_logic:
К автору индикатора уже обращались?
нет, попробую написать, но думаю дело не в авторе, а что-то не так с новым компилятором.
К автору индикатора уже обращались?
Думаю проблема в WinExec
Он принимает строку в стандарте ANSI, а билд 600+ передает уже строки WideChar (UTF-16).
Для запуска приложения наверное лучше использовать в данном случае CreateProcessW вместо WinExec.
elugovoy:
Можете изменить это в коде? WinExec там в 3х строках, просто я не программист и что куда и с какими параметрами передавать слабо представляю (только в общих чертах понимаю что к чему). В комментария к индикатору автора оставлю решение, может я не один такой кому нужно.
Думаю проблема в WinExec
Он принимает строку в стандарте ANSI, а билд 600+ передает уже строки WideChar (UTF-16).
Для запуска приложения наверное лучше использовать в данном случае CreateProcessW вместо WinExec.
Ну что-то вроде этого:
//+------------------------------------------------------------------+ //| Snarl.mq4 | //| Roffild | //| http://codebase.mql4.com/ru/5670 | //+------------------------------------------------------------------+ // Необходимо "Разрешить импорт DLL" #property copyright "Roffild" #property link "http://codebase.mql4.com/ru/5670" #property indicator_chart_window //--------------------------------------- #import "shell32.dll" int ShellExecuteW (int hwnd, string lpOperation, string lpFile, string lpParameters, string lpDirectory, int nShowCmd); #import //--------------------------------------- extern color HLine_small_BID = CornflowerBlue; extern color HLine_big_BID = SkyBlue; extern color HLine_small_ASK = Coral; extern color HLine_big_ASK = LightCoral; //--------------------------------------- extern color VLine = Orchid; extern color VLine_big = HotPink; //--------------------------------------- // Trendline.......... no extern int TimeOut = 15; extern string Snarl_Title = "MetaTrader"; extern string Snarl_CMD = "\"c:\\program files\\full phat\\snarl\\snarl_cmd.exe\""; // Убедитесь что путь прописан к установленному SNARL int start() { //Print("HLine_small_BID=",HLine_small_BID,", HLine_big_BID=",HLine_big_BID,", HLine_small_ASK=",HLine_small_ASK,", HLine_big_ASK=",HLine_big_ASK,", VLine=",VLine,", VLine_big=",VLine_big,", TimeOut=",TimeOut); int obj_total=ObjectsTotal(); string objname, objdesc=""; for(int i=0;i<obj_total;i++) { objname = ObjectName(i); if (ObjectType(objname) == OBJ_HLINE) { //Print(TimeToStr(TimeCurrent(), TIME_DATE|TIME_SECONDS)," < ",(GetLastTime(ObjectDescription(objname)) + TimeOut)); if (TimeCurrent() < (GetLastTime(ObjectDescription(objname)) + TimeOut)) continue; if (GetLastTime(ObjectDescription(objname)) > 0) { if (StringLen(ObjectDescription(objname)) > 11) objdesc = StringSubstr(ObjectDescription(objname), 0, StringLen(ObjectDescription(objname))-11); else objdesc = ""; } else objdesc = ObjectDescription(objname); //Print(objname," ",ObjectGet(objname, OBJPROP_COLOR),"==",vcolor," ",ObjectGet(objname, OBJPROP_PRICE1)); if (ObjectGet(objname, OBJPROP_COLOR) == HLine_small_BID && ObjectGet(objname, OBJPROP_PRICE1) < Bid) { Print(TimeOut," \"",Snarl_Title,"\" \"",Symbol()," ",TimeToStr(TimeCurrent())," BID: ",Bid," ASK: ",Ask," Description: ",objdesc,"\""); snarl(TimeOut+" \""+Snarl_Title+"\" \""+Symbol()+"\n"+TimeToStr(TimeCurrent())+"\nBID: "+Bid+"\nASK: "+Ask+"\nDescription:\n"+objdesc+"\""); ObjectSetText(objname, objdesc + ";" + TimeCurrent()); continue; } if (ObjectGet(objname, OBJPROP_COLOR) == HLine_big_BID && ObjectGet(objname, OBJPROP_PRICE1) > Bid) { Print(TimeOut," \"",Snarl_Title,"\" \"",Symbol()," ",TimeToStr(TimeCurrent())," BID: ",Bid," ASK: ",Ask," Description: ",objdesc,"\""); snarl(TimeOut+" \""+Snarl_Title+"\" \""+Symbol()+"\n"+TimeToStr(TimeCurrent())+"\nBID: "+Bid+"\nASK: "+Ask+"\nDescription:\n"+objdesc+"\""); ObjectSetText(objname, objdesc + ";" + TimeCurrent()); continue; } if (ObjectGet(objname, OBJPROP_COLOR) == HLine_small_ASK && ObjectGet(objname, OBJPROP_PRICE1) < Ask) { Print(TimeOut," \"",Snarl_Title,"\" \"",Symbol()," ",TimeToStr(TimeCurrent())," BID: ",Bid," ASK: ",Ask," Description: ",objdesc,"\""); snarl(TimeOut+" \""+Snarl_Title+"\" \""+Symbol()+"\n"+TimeToStr(TimeCurrent())+"\nBID: "+Bid+"\nASK: "+Ask+"\nDescription:\n"+objdesc+"\""); ObjectSetText(objname, objdesc + ";" + TimeCurrent()); continue; } if (ObjectGet(objname, OBJPROP_COLOR) == HLine_big_ASK && ObjectGet(objname, OBJPROP_PRICE1) > Ask) { Print(TimeOut," \"",Snarl_Title,"\" \"",Symbol()," ",TimeToStr(TimeCurrent())," BID: ",Bid," ASK: ",Ask," Description: ",objdesc,"\""); snarl(TimeOut+" \""+Snarl_Title+"\" \""+Symbol()+"\n"+TimeToStr(TimeCurrent())+"\nBID: "+Bid+"\nASK: "+Ask+"\nDescription:\n"+objdesc+"\""); ObjectSetText(objname, objdesc + ";" + TimeCurrent()); continue; } } if (ObjectType(objname) == OBJ_VLINE) { if (TimeCurrent() < (GetLastTime(ObjectDescription(objname)) + TimeOut)) continue; if (GetLastTime(ObjectDescription(objname)) > 0) { if (StringLen(ObjectDescription(objname)) > 11) objdesc = StringSubstr(ObjectDescription(objname), 0, StringLen(ObjectDescription(objname))-11); else objdesc = ""; } else objdesc = ObjectDescription(objname); //Print(ObjectGet(objname, OBJPROP_COLOR)," == ",VLine,", ",TimeToStr(ObjectGet(objname, OBJPROP_TIME1))); if (ObjectGet(objname, OBJPROP_COLOR) == VLine && ObjectGet(objname, OBJPROP_TIME1) > TimeCurrent()-60 && ObjectGet(objname, OBJPROP_TIME1) < TimeCurrent()+60) { Print(TimeOut," \"",Snarl_Title,"\" \"",Symbol()," ",TimeToStr(TimeCurrent())," BID: ",Bid," ASK: ",Ask," Description: ",objdesc,"\""); snarl(TimeOut+" \""+Snarl_Title+"\" \""+Symbol()+"\n"+TimeToStr(TimeCurrent())+"\nBID: "+Bid+"\nASK: "+Ask+"\nDescription:\n"+objdesc+"\""); ObjectSetText(objname, objdesc + ";" + TimeCurrent()); continue; } if (ObjectGet(objname, OBJPROP_COLOR) == VLine_big && ObjectGet(objname, OBJPROP_TIME1) < TimeCurrent()) { Print(TimeOut," \"",Snarl_Title,"\" \"",Symbol()," ",TimeToStr(TimeCurrent())," BID: ",Bid," ASK: ",Ask," Description: ",objdesc,"\""); snarl(TimeOut+" \""+Snarl_Title+"\" \""+Symbol()+"\n"+TimeToStr(TimeCurrent())+"\nBID: "+Bid+"\nASK: "+Ask+"\nDescription:\n"+objdesc+"\""); ObjectSetText(objname, objdesc + ";" + TimeCurrent()); continue; } } } return(1); } void snarl(string str) { //WinExec(Snarl_CMD + " snShowMessage " + str, 0); ShellExecuteW (0, "open", Snarl_CMD, " snShowMessage " + str, "", 0); } int GetLastTime(string str) { return( StrToInteger(StringSubstr(str, StringLen(str)-10)) ); } // the end.
Сам не проверял, поскольку SNARL не устанавливал и не пользуюсь. Но по логике работать должно.
elugovoy:
Да, все заработало, огромное спасибо
Ну что-то вроде этого:
Сам не проверял, поскольку SNARL не устанавливал и не пользуюсь. Но по логике работать должно.

Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Есть индикатор https://www.mql5.com/ru/code/8954 если скомпилировать его в новых версиях МТ4 ориентировочно после 600 билда, то он не работает никак, если достатть древний ex4 файл скомпилированный в 400-600 билдах, то все нормально работает, почему так? И может что-то можно сделать чтобы в новых версиях все тоже работало.
параметры старого ex4 http://c2n.me/jd3seW
после компиляции в свежем билде выглядит так (в примере другой индикатор) http://c2n.me/jd3wv0, т.е. добавляются новые вкладки, сам файл увеличивается в размерах примерно в двое и перестает работать.
Т.е. все запускается. в журналах эксперта видны принты которые указаны в индикаторе (типа все отрабатывает) но сам экзешник с передаваемыми параметрами не вызывается и в итоге ничего не работает.
Для сравнения вот старый ex4