Oceani4 Опубликовано 27 марта, 2017 Поделиться Графический интерфейс - обмен опытом Опубликовано 27 марта, 2017 Подсмотрел я как сделан интерфейс в одном индикаторе (инфопанель Ильнура для сетки) и стало мне понятно как для советников можно просто создавать интерфейс и самое главное, его потом можно перемещать мышкой по экрану. Те, что я велосипедил до этого, были абсолютно статичны и более объемны по коду. Но возникла проблема обработки нажатия на кнопки. После 20-го, 30-го... 50-го нажатия одна из кнопок как-бы залипает и срабатывает 2-5-6 раз. И если это была команда на закрытие сетки ордеров - все бы ничего, а вот если это кнопка открытия нового ордера!!?? Робот лупанет 5-6 ордеров в одной точке. :(Пробовал на терминалах разных билдов.Сейчас код вот такой: Спойлер void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { iPanel.OnEvent(id, lparam, dparam, sparam); if (iPanel.xBuy_Button.Pressed()) Print("Нажата xBuy !!!"); if (iPanel.Buy_Button.Pressed()) Print("Нажата Buy 0.32 !!!"); if (iPanel.xSell_Button.Pressed()) Print("Нажата xSell !!!"); if (iPanel.Sell_Button.Pressed()) {Print("Нажата Sell 0.18 !!!"); }; ChartRedraw();} Раньше делал как-то так и дабл-трипл клик не было (но инфоокно - статично) Спойлер if(id==CHARTEVENT_OBJECT_CLICK) { if(sparam == btnCloseAllBuy.name) {CloseOrders(OP_BUY); ObjectSetInteger(0,btnCloseAllBuy.name,OBJPROP_STATE,0); lastBuyTP =0; GlobalVariableSet(Symbol()+"lastBuyTP",lastBuyTP);} if(sparam == btnCloseAllSell.name){CloseOrders(OP_SELL);ObjectSetInteger(0,btnCloseAllSell.name,OBJPROP_STATE,0);lastSellTP =0; GlobalVariableSet(Symbol()+"lastSellTP",lastSellTP);}} В приложении исходник индикатора с моей панелью. Там под комментариями в функции OnChartEvent видны мои эксперименты. Буду рад любым идеям и особенно примерам интерфесов с исходниками. P.S. И желательно для "домохозяек"! Спойлер O4_Setka_Interface_tmp.mq4 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
alexzt Опубликовано 7 апреля, 2017 Поделиться Графический интерфейс - обмен опытом Опубликовано 7 апреля, 2017 Хорошая задумка. Я как раз ищу нечто подобное, с мани менеджментом, чтобы в один клик выставлять ордера по рынку. Ссылка на сообщение Поделиться на другие сайты More sharing options...
ilnur17021992 Опубликовано 8 апреля, 2017 Поделиться Графический интерфейс - обмен опытом Опубликовано 8 апреля, 2017 Буду рад любым идеям и особенно примерам интерфесов с исходниками. Простой исходник торговой панели для советника с кнопками: Спойлер Код://+------------------------------------------------------------------+//| TradePanel.mq4 |//| Ilnur17021992. Special for http://tradelikeapro.ru |//| http://tradelikeapro.ru |//+------------------------------------------------------------------+#property copyright "Ilnur17021992. Special for http://tradelikeapro.ru"#property link "http://tradelikeapro.ru"#property version "1.00"#property strict#include #include #include //--- Inputsextern double Lot = 0.1;extern int StopLoss = 500;extern int TakeProfit = 500;extern int Slip = 30;extern int Magic = 0;//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+enum label_align { left=-1, right=1, center=0 };//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+class CTradePanel : public CAppDialog {private: CLabel Lots_label; // Display label " Lots" CEdit Lots; // Display volume of next order CButton SELL,BUY; // Sell and Buy Buttons CButton CloseAll; // Close buttons //--- Create Label object bool CreateLabel(const long chart,const int subwindow,CLabel &object,const string text,const uint x,const uint y,label_align align); //--- Create Button bool CreateButton(const long chart,const int subwindow,CButton &object,const string text,const uint x,const uint y,const uint x_size,const uint y_size); //--- Create Edit object bool CreateEdit(const long chart,const int subwindow,CEdit &object,const string text,const uint x,const uint y,const uint x_size,const uint y_size); //--- On Event functions void LotsEndEdit(void); // Edit Lot size //--- variables of current values double cur_lot; // Lot of next order void BuyClick(); // Click BUY button void SellClick(); // Click SELL button void CloseClick(); // Click CLOSE button public: CTradePanel(void){}; ~CTradePanel(void){}; virtual bool Create(const long chart,const string name,const int subwin=0,const int x1=20,const int y1=20,const int x2=320,const int y2=420); virtual bool OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam); virtual void Destroy(const int reason); };CTradePanel TradePanel;//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+int OnInit() {//---// Create Trade Panel TradePanel.Create(ChartID(),"TradePanel",0,20,20,150,200); TradePanel.Run(); //--- return(INIT_SUCCEEDED); }//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+void OnDeinit(const int reason) { TradePanel.Destroy(reason); }//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+bool CTradePanel::CreateLabel(const long chart,const int subwindow,CLabel &object,const string text,const uint x,const uint y,label_align align) {// All objects must have separate name string name=m_name+"Label"+(string)ObjectsTotal(chart,-1,OBJ_LABEL);//--- Call Create function if(!object.Create(chart,name,subwindow,x,y,0,0)) { return false; }//--- Adjust text if(!object.Text(text)) { return false; }//--- Align text to Dialog box's grid ObjectSetInteger(chart,object.Name(),OBJPROP_ANCHOR,(align==left ? ANCHOR_LEFT_UPPER :(align==right ? ANCHOR_RIGHT_UPPER : ANCHOR_UPPER)));//--- Add object to controls if(!Add(object)) { return false; } return true; }//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+bool CTradePanel::CreateButton(const long chart,const int subwindow,CButton &object,const string text,const uint x,const uint y,const uint x_size,const uint y_size) {// All objects must have separate name string name=m_name+"Button"+(string)ObjectsTotal(chart,-1,OBJ_BUTTON);//--- Call Create function if(!object.Create(chart,name,subwindow,x,y,x+x_size,y+y_size)) { return false; }//--- Adjust text if(!object.Text(text)) { return false; }//--- set button flag to unlock object.Locking(false);//--- set button flag to unpressed if(!object.Pressed(false)) { return false; }//--- Add object to controls if(!Add(object)) { return false; } return true; }//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+bool CTradePanel::CreateEdit(const long chart,const int subwindow,CEdit &object,const string text,const uint x,const uint y,const uint x_size,const uint y_size) {// All objects must have separate name string name=m_name+"Edit"+(string)ObjectsTotal(chart,-1,OBJ_EDIT);//--- Call Create function if(!object.Create(chart,name,subwindow,x,y,x+x_size,y+y_size)) { return false; }//--- Adjust text if(!object.Text(text)) { return false; }//--- Align text in Edit box if(!object.TextAlign(ALIGN_CENTER)) { return false; }//--- set Read only flag to false if(!object.ReadOnly(false)) { return false; }//--- Add object to controls if(!Add(object)) { return false; } return true; }//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+bool CTradePanel::Create(const long chart,const string name,const int subwin=0,const int x1=20,const int y1=20,const int x2=320,const int y2=420) {// At first call create function of parents class CAppDialog::Create(chart,name,subwin,x1,y1,x2,y2);// Calculate coordinates and size of BID object// Create object CreateLabel(chart,subwin,Lots_label,"LOT",55,5,0); CreateEdit(chart,subwin,Lots,"0.1",33,35,60,20); CreateButton(chart,subwin,BUY,"BUY",33,65,60,20); CreateButton(chart,subwin,SELL,"SELL",33,95,60,20); CreateButton(chart,subwin,CloseAll,"CLOSE",33,125,60,20); return(true); }//+------------------------------------------------------------------+//| Event Handling |//+------------------------------------------------------------------+EVENT_MAP_BEGIN(CTradePanel)ON_EVENT(ON_END_EDIT,Lots,LotsEndEdit)ON_EVENT(ON_CLICK,BUY,BuyClick)ON_EVENT(ON_CLICK,SELL,SellClick)ON_EVENT(ON_CLICK,CloseAll,CloseClick)EVENT_MAP_END(CAppDialog)//+------------------------------------------------------------------+//| Click BUY button |//+------------------------------------------------------------------+void CTradePanel::BuyClick(void) { PutOrder(0,Ask); }//+------------------------------------------------------------------+//| Click BUY button |//+------------------------------------------------------------------+void CTradePanel::SellClick(void) { PutOrder(1,Bid); }//+------------------------------------------------------------------+//| Click BUY button |//+------------------------------------------------------------------+void CTradePanel::CloseClick(void) { CloseAll(); }//+------------------------------------------------------------------+//| Read lots value after edit |//+------------------------------------------------------------------+void CTradePanel::LotsEndEdit(void) {//--- Read and normalize lot value cur_lot=NormalizeDouble(StringToDouble(Lots.Text()),2); }//+------------------------------------------------------------------+//| Application deinitialization function |//+------------------------------------------------------------------+void CTradePanel::Destroy(const int reason) { CAppDialog::Destroy(reason); return; }//+------------------------------------------------------------------+//| Установка ордера |//+------------------------------------------------------------------+void PutOrder(int type,double price) { int r=0; color clr=Green; double sl=0,tp=0; if(type==1 || type==3 || type==5) { clr=Red; if(StopLoss>0) sl=NormalizeDouble(price+StopLoss*Point,Digits); if(TakeProfit>0) tp=NormalizeDouble(price-TakeProfit*Point,Digits); } if(type==0 || type==2 || type==4) { clr=Blue; if(StopLoss>0) sl=NormalizeDouble(price-StopLoss*Point,Digits); if(TakeProfit>0) tp=NormalizeDouble(price+TakeProfit*Point,Digits); } r=OrderSend(NULL,type,Lot,NormalizeDouble(price,Digits),Slip,sl,tp,"",Magic,0,clr); return; }//+------------------------------------------------------------------+//| Закрытие позиции по типу ордера |//+------------------------------------------------------------------+void CloseAll(int ot=-1) { bool cl; for(int i=OrdersTotal()-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) { if(OrderType()==0 && (ot==0 || ot==-1)) { RefreshRates(); cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),Slip,White); } if(OrderType()==1 && (ot==1 || ot==-1)) { RefreshRates(); cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slip,White); } } } } }//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+void OnTick() {//--- }//+------------------------------------------------------------------+//| ChartEvent function |//+------------------------------------------------------------------+void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) {//--- TradePanel.OnEvent(id,lparam,dparam,sparam); }//+------------------------------------------------------------------+ 8 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Pioner_rus Опубликовано 11 апреля, 2017 Поделиться Графический интерфейс - обмен опытом Опубликовано 11 апреля, 2017 А по каким материалам лучше изучать программирование графического интерфейса: кнопки там всякие, метки, линии, обработка событий от них? Киньте ссылку, если не трудно! Ссылка на сообщение Поделиться на другие сайты More sharing options...
ilnur17021992 Опубликовано 12 апреля, 2017 Поделиться Графический интерфейс - обмен опытом Опубликовано 12 апреля, 2017 (изменено) А по каким материалам лучше изучать программирование графического интерфейса: кнопки там всякие, метки, линии, обработка событий от них? Киньте ссылку, если не трудно! Как быстро добавить панель управления к индикатору и советникуИзменяем параметры эксперта с пользовательской панели "На лету"Графические интерфейсы III: Простые и многофункциональные кнопки (Глава 1)Вот тут огромная библиотека по графическим интерфейсам в MQL Изменено 12 апреля, 2017 пользователем ilnur17021992 10 Ссылка на сообщение Поделиться на другие сайты More sharing options...
lova Опубликовано 31 июля, 2017 Поделиться Графический интерфейс - обмен опытом Опубликовано 31 июля, 2017 (изменено) Скомпилировал панельку из третьего поста в MT4. Столкнулся с такой проблемой — при переключении таймфреймов панелька рассыпается. Нормально проходит только первое переключение. Может кто подскажет, как это побороть?MT4 Build 1090. Добавлено: 31-07-2017 16:27:08Еще немного дополнительной информации:Нашел, что если в файле Dialog.mqh в функции CAppDialog::Destroy(const int reason) закоментировать строки if(m_deinit_reason!=WRONG_VALUE) return;то панелька при переключении таймфреймов нормально уничтожается и заново инитится.В классах я практически полный ноль, но имхо курочить Dialog.mqh не есть правильно. Может кто-нибудь подсказать как поступить в данной ситуации?Добавлено: 31-07-2017 19:50:06Продолжение:В коде примера из третьего поста изменил функцию CTradePanel::Destroy(const int reason)://+------------------------------------------------------------------+//| Application deinitialization function |//+------------------------------------------------------------------+void CTradePanel::Destroy(const int reason){ m_chart.Detach(); CDialog::Destroy(reason); if(reason==REASON_PROGRAM) { ExpertRemove(); } return;} В таком варианте панелька не рассыпается. Не уверен, что это правильное решение, но работает.Panel_1.jpg Изменено 1 августа, 2017 пользователем lova 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
bor-ix Опубликовано 12 августа, 2018 Поделиться Графический интерфейс - обмен опытом Опубликовано 12 августа, 2018 А по каким материалам лучше изучать программирование графического интерфейса: кнопки там всякие, метки, линии, обработка событий от них? Киньте ссылку, если не трудно! Как быстро добавить панель управления к индикатору и советникуИзменяем параметры эксперта с пользовательской панели "На лету"Графические интерфейсы III: Простые и многофункциональные кнопки (Глава 1)Вот тут огромная библиотека по графическим интерфейсам в MQL Приветствую!меня тоже очень интересует тема создания графических панелек......но в предоставленных Вами выше ссылках - находятся ссылки на mql5 - язык с программами для MT5 - примеры которых не работают в MT4......сколько я не искал - хорошего материала для МТ4 я так и не нашел (нашел только здесь пример исходного кода в топике автора - ему спасибо за это)...может у кого-то найдутся ли материалы по графическим панелям для mql4?или же есть возможность как то запустить код написанный в mql5 для MT4?буду очень признателен + как-то расшевелю эту тему! =^-^= Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 13 августа, 2018 Поделиться Графический интерфейс - обмен опытом Опубликовано 13 августа, 2018 bor-ix что именно интересует? Представленный код отлично работает в МТ4, просто пробуйте использовать, добавьте кнопочку и т.д.Ссылка Ссылка на сообщение Поделиться на другие сайты More sharing options...
bor-ix Опубликовано 13 августа, 2018 Поделиться Графический интерфейс - обмен опытом Опубликовано 13 августа, 2018 (изменено) bor-ix что именно интересует? Представленный код отлично работает в МТ4, просто пробуйте использовать, добавьте кнопочку и т.д.Ссылка Ссылка0ll, согласен - в топике представленный исходник работает - и выводит панель!программирую я не очень + с ООП - совсем не дружу... >^-^ранее кодил посредством копипастов и разбирательства с ним в процедурном виде, кое где добавлял функции и этого мне было достаточно...сейчас чтоб свое "совсем не дружу" по вопросу графических интерфейсов изменить в "дружу" ищу подробный материал как это делать в mql4...допустим в примере из 3 поста (с изменениями из 5-го) - представленная панель не читает объемы ордера указываемые в самой панели - вводимые руками... а ссылки на материал предоставленный по mql5 - не подходит для mql4... :-?прошу помощи в моих изысканиях =^-^= Изменено 13 августа, 2018 пользователем bor-ix Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 13 августа, 2018 Поделиться Графический интерфейс - обмен опытом Опубликовано 13 августа, 2018 панель не читает объемы ордера указываемые в самой панели - вводимые руками... Там ошибочка..., подсказываю:есть начальный лот в настройках - Lotесть переменная в классе панели - cur_lotесть функция отправки ордера - PutOrderЧто нужно сделать:Там где рисуются кнопочки и поля ввода панели, нужно в вставить в поле-Edit не текст "0,1", а реальный начальный лот LotПри нажатии кнопок Бай/Селл вызывается функция PutOrder - добавить аргумент ЛОТ и передать туда cur_lot.Сделай сам и выложи сюда рабочий файл. Успехов! 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
bor-ix Опубликовано 14 августа, 2018 Поделиться Графический интерфейс - обмен опытом Опубликовано 14 августа, 2018 (изменено) Цитата ...Что нужно сделать:... в настройках робота (панели) объявлена переменная, и она доступна из любого класса...extern double Lot = 0.1;в классе "class CTradePanel : public CAppDialog" в 53 строке (она под идентификатором private: ) - где попало ее не вызовешь Цитата double cur_lot; правильно ли будет в аргументы функции PutOrder() как вы говорите добавить - третий аргумент - типа: Цитата void PutOrder(int type,double price, double sLot) и Цитата //+------------------------------------------------------------------+//| Click BUY button |//+------------------------------------------------------------------+void CTradePanel::BuyClick(void) { PutOrder(0,Ask, cur_lot); }//+------------------------------------------------------------------+//| Click BUY button |//+------------------------------------------------------------------+void CTradePanel::SellClick(void) { PutOrder(1,Bid, cur_lot); } ???в 190 строке - заменить на числовое нельзя т.к. она объявлена в 47 строке как String... (const string text) Цитата CreateEdit(chart,subwin,Lots,"0.1",33,35,60,20); если в функции строковую переменную заменить на числовую: Цитата bool CreateEdit(const long chart,const int subwindow,CEdit &object,const double num,const uint x,const uint y,const uint x_size,const uint y_size); и Цитата bool CTradePanel::CreateEdit(const long chart,const int subwindow,CEdit &object,const double num,const uint x,const uint y,const uint x_size,const uint y_size) то в строке 157 - выдает ошибку...что дальше делать - я уже не понимаю... :-? fcplm ~x(-------------------ПС: понимаю что без ООП тут мне делать нечего, но как то его надо начать учить!..но для mql4 - таких материалов нигде нет...Panel_20180813.mq4 Изменено 14 августа, 2018 пользователем bor-ix 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 15 августа, 2018 Поделиться Графический интерфейс - обмен опытом Опубликовано 15 августа, 2018 bor-ix Ну что - классно. Давай добивать панельку:1. С PutOrder() всё сделал как надо \M/2. Надо добиться, чтоб при старте панели в Edite отображался лот указанный в настройках (Lot) Вы уже передали значение Lot в функцию рисования Edit-a, но почему-то не использовали... нужно в if(!object.Text(text)) вместо text вставить DoubleToStr(num) Доделай, потестируй, если ОК - напиши.В качестве доп.задания:добавь Label внизу панельки и выведи туда прибыль всех открытых ордеров по текущей паре. (я помогу, если нужно) 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
bor-ix Опубликовано 15 августа, 2018 Поделиться Графический интерфейс - обмен опытом Опубликовано 15 августа, 2018 (изменено) bor-ix Ну что - классно. Давай добивать панельку:1. С PutOrder() всё сделал как надо \M/2. Надо добиться, чтоб при старте панели в Edite отображался лот указанный в настройках (Lot) Вы уже передали значение Lot в функцию рисования Edit-a, но почему-то не использовали...нужно в if(!object.Text(text)) вместо text вставить DoubleToStr(num)Доделай, потестируй, если ОК - напиши.В качестве доп.задания:добавь Label внизу панельки и выведи туда прибыль всех открытых ордеров по текущей паре. (я помогу, если нужно) отлично - с Вашими подсказками теперь всё работает!!! #:-s0ll, спасибо за поддержку! >:dприму Ваше условие по дополнению инфы в панельку и буду продолжать учиться кодить! =^-^= Изменено 15 августа, 2018 пользователем bor-ix Ссылка на сообщение Поделиться на другие сайты More sharing options...
Старик Опубликовано 16 августа, 2018 Поделиться Графический интерфейс - обмен опытом Опубликовано 16 августа, 2018 отлично - с Вашими подсказками теперь всё работает!!! а у нас будет работать или только у вас? :)последнюю рабочую версию мы увидим? Ссылка на сообщение Поделиться на другие сайты More sharing options...
bor-ix Опубликовано 16 августа, 2018 Поделиться Графический интерфейс - обмен опытом Опубликовано 16 августа, 2018 (изменено) отлично - с Вашими подсказками теперь всё работает!!! а у нас будет работать или только у вас? :)последнюю рабочую версию мы увидим? у меня есть 2 варианта:оба работают, но:в первом варианте (там где окошко) - табличка выводит double значение (0.01000000) - из-за замены параметров в функциях на double...во втором (пересмотрев код) - выводит string значение (0.02) - вернул обратно изначальный код функций string и по другому решил данный вопрос...Panel_20180815-1.mq4Panel_20180815-2.mq4 Изменено 16 августа, 2018 пользователем bor-ix 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 16 августа, 2018 Поделиться Графический интерфейс - обмен опытом Опубликовано 16 августа, 2018 bor-ix чтоб не выводило нули достаточно сделать так: DoubleToStr( num, 2 ) 2 - это количество знаков (точность)Вам бы ещё со справкой научиться работать... 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
bor-ix Опубликовано 17 августа, 2018 Поделиться Графический интерфейс - обмен опытом Опубликовано 17 августа, 2018 (изменено) bor-ix чтоб не выводило нули достаточно сделать так: DoubleToStr( num, 2 ) 2 - это количество знаков (точность)Вам бы ещё со справкой научиться работать... я таким то способом и решил вопрос с количеством нулей во второй панельке - там где записывается строковый (string) параметр в функции CreateEdit......а вот в первом варианте панельки (с нулями) в функцию записывается параметр в формате double - вот я и не знаю как double параметр представить там в виде с двумя цифрами после запятой... :-/для меня это не решаемо... разве что - перевести его в строковый (string) параметр... т.е. string переводим в double, а потом обратно в string... - а это уже получается много лишнего кода - зачем это делать?..Добавлено: 17-08-2018 16:36:42для выполнения Вашего задания, 0ll - для расчета прибыли по открытым ордерам - я код то написал... Цитата double BuyProfit = 0, SellProfit = 0, SumProfit = 0;if(OrdersTotal() > 0) { for(int i = 0; i { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) { switch(OrderType()) { case OP_BUY: BuyProfit = BuyProfit + OrderProfit() + OrderCommission() + OrderSwap(); break; case OP_SELL: SellProfit = SellProfit + OrderProfit() + OrderCommission() + OrderSwap(); break; } } } }SumProfit = BuyProfit + SellProfit;}else SumProfit = 0; а вот в какую часть кода нашей панельки его записать я уже не понимаю...вот вид будущей панельки:-------------ПС: уважаемые админы - движок форума на меня ругается когда я хочу записать текст в формате кода - "Sorry, you are not allowed to post external links."...пока обхожу этот запрет через форматирование цитатами... - что у меня может быть не так?Добавлено: 18-08-2018 00:32:03всё - задачка решена! =^-^=Panel_20180816-2.mq4 Изменено 18 августа, 2018 пользователем bor-ix 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 18 августа, 2018 Поделиться Графический интерфейс - обмен опытом Опубликовано 18 августа, 2018 т.е. string переводим в double, а потом обратно в string... - а это уже получается много лишнего кода - зачем это делать?.. Нет, что-то здесь Вы перегнули...У Вас есть:1. double параметр Lot в настройках2. поле string для вывода этого параметрапоэтому достаточно 1-го преобразования DoubleToStr( Lot, 2 );понятно, что когда меняете этот параметр, то идёт обратное преобразование, но по другому ни как... - панель для торговли вешаете, а не для красоты. Ссылка на сообщение Поделиться на другие сайты More sharing options...
bor-ix Опубликовано 18 августа, 2018 Поделиться Графический интерфейс - обмен опытом Опубликовано 18 августа, 2018 т.е. string переводим в double, а потом обратно в string... - а это уже получается много лишнего кода - зачем это делать?.. Нет, что-то здесь Вы перегнули...У Вас есть:1. double параметр Lot в настройках2. поле string для вывода этого параметрапоэтому достаточно 1-го преобразования DoubleToStr( Lot, 2 );понятно, что когда меняете этот параметр, то идёт обратное преобразование, но по другому ни как... - панель для торговли вешаете, а не для красоты. 0ll, в первом моём варианте - вот так "по другому" и получилось - я поменял логику и из-за этого не мог побороть многозначность отображаемых данных...поспорю на счет "красоты" - все должно быть функционально, удобно и эстетично... если информация будет предоставляться кое-как - её нельзя будет прочитать, это будет отвлекать излишними действиями и постоянно раздражать - а оно нам такое надо(?) если можно предусмотреть решение этих неприятных нюансов... Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 18 августа, 2018 Поделиться Графический интерфейс - обмен опытом Опубликовано 18 августа, 2018 bor-ix посмотрел код, по теме вывода Lot - вопросов нет, всё правильно.По выводу профита - у Вас профит считает один раз при запуске панели, исправил чуток, можете смотреть.Panel_3.mq4 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
bor-ix Опубликовано 18 августа, 2018 Поделиться Графический интерфейс - обмен опытом Опубликовано 18 августа, 2018 (изменено) bor-ix посмотрел код, по теме вывода Lot - вопросов нет, всё правильно.По выводу профита - у Вас профит считает один раз при запуске панели, исправил чуток, можете смотреть. Цитата void OnTick(){//--- TradePanel.nProf.Text( DoubleToStr( Profit(),2) );} 0ll, я понимаю, что функция OnTick() - это то место где ежетиково будет производится пересчет текущих значений... но мои потуги подставить результаты подсчета профита туда - у меня не увенчались успехом - выкрутился так как Вы увидели......я не понимаю логики записи: "TradePanel.nProf.Text" - что обозначают точки и последовательность этой записи... где можно про это прочитать?что обозначает запись: Цитата public: CLabel nProf; + Цитата CreateLabel(chart,subwin,nProf,"wait...",60,155,0); я не пониманию, что вместо "wait..." записать чтоб данные профита правильно подставляло?или также как со значением Lot поступить - перевести его в string и подставить в строку отображения CreateLabel? Цитата string Profit = DoubleToStr(Profit(),2);...CreateLabel(chart,subwin,nProf,Profit,60,155,0); Изменено 18 августа, 2018 пользователем bor-ix Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 18 августа, 2018 Поделиться Графический интерфейс - обмен опытом Опубликовано 18 августа, 2018 ...я не понимаю логики записи: "TradePanel.nProf.Text" - что обозначают точки и последовательность этой записи... где можно про это прочитать? Это и есть ООП...Вы создали объект TradePanel, потом внутри него создали label-объект nProf (если заметили я его перенёс из области private в область public), у последнего объекта есть свойство Text - вот в него и нужно записывать значение. Почитайте хотя-бы справку по mql, там есть " Другие операции / Операция точка ( . ) "и по ООП тоже есть инфа.я не пониманию, что вместо "wait..." записать чтоб данные профита подставляло? "wait..." - это временная надпись во время создания объекта, когда придёт тик там появятся данные профита по текущим сделкам. Ссылка на сообщение Поделиться на другие сайты More sharing options...
bor-ix Опубликовано 18 августа, 2018 Поделиться Графический интерфейс - обмен опытом Опубликовано 18 августа, 2018 (изменено) я не пониманию, что вместо "wait..." записать чтоб данные профита подставляло? "wait..." - это временная надпись во время создания объекта, когда придёт тик там появятся данные профита по текущим сделкам. при закрытом рынке - не очень практично...---------------0ll, спасибо на ссылку про ООП в разделе справки - буду изучать...-------------ПС: приложу тут версию последней панельки которая показывает профит и при закрытом рынкеPanel_3+.mq4 Изменено 20 августа, 2018 пользователем bor-ix Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 18 августа, 2018 Поделиться Графический интерфейс - обмен опытом Опубликовано 18 августа, 2018 при закрытом рынке - не очень практично... Я просто показал разницу между созданием объекта и дальнейшим использованием. Вы можете делать как считаете удобным. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 2 сентября, 2018 Поделиться Графический интерфейс - обмен опытом Опубликовано 2 сентября, 2018 Если кому интересна тема панелей - есть запрос на следующую конфигурацию. Если нужна будет помощь - пишите. tm-close-buttons-screen-5140.png Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти