Перейти к содержанию

Графический интерфейс - обмен опытом


Рекомендуемые сообщения

Графический интерфейс - обмен опытом Опубликовано (изменено)


Если кому интересна тема панелей - есть запрос на следующую конфигурацию. Если нужна будет помощь - пишите.

Да, программисты, тема ОЧЕНЬ актуальна для меня лично и думаю для МНОГИХ кто управляет приличным числом ордеров на нескольких чартах.
Допустим у меня сейчас открыто 13 счетов с 1000 ордерами на каждом. Итого 13000 ордеров. Естественно сейчас этим добром управляет советник, НО чувствую явную необходимость во всомогательной панели чтобы в ручном режиме вовремя закрывать сетки.

В идеале вижу вариант как на скрине. Также надо сделать ВСЕ возможное для экономии рабочего пространства на графике, поэтому названия кнопочек необходимо сделать как на скрине.
Я не программист, но ЕСЛИ скрипты на отдельное событие (закрытие плюсовых, закрытие минусовых, итд...) помогут, могу выложить мой набор рабочих надежных скриптов.

Кроме того, кто знает что такое функция CloseBY, то могу выложить открытый код по закрытию ордеров с использованием данной функции. Кто знает - понимает МОЩЬ данной функции (молниеносное закрытие, меньшие торговые издержки).
void ReconcileHedgeOrders()
{
for(int i=OrdersTotal()-1;i>0&&!IsStopped();i--)
{
if(OrderSelect(i,SELECT_BY_POS)
&& OrderSymbol()==_Symbol
&& OrderType() && (!m_locked_magic || OrderMagicNumber() == MAGIC)
)
{
int type = OrderType();
int ticket = OrderTicket();
for(int j=i-1;OrderSelect(j,SELECT_BY_POS);j--)
{
if(OrderSymbol()==_Symbol
&& OrderType() && OrderType()!=type
&& (!m_locked_magic || OrderMagicNumber() == MAGIC)
)
{
if(!OrderCloseBy(OrderTicket(),ticket))
Print("OrderCLoseByError: ",GetLastError());
i=OrdersTotal();
break;
}
}
}
}
}

И видео панели на основании скрипта


Описание:
Спойлер

I know, I know... we've all said it before, hedging is f*** stupid because it costs you double in fees, right?

Well that's actually not (always) the case. There's a neat little hidden gem in MT that's almost entirely undocumented and almost never used by developers (ever) that's called OrderCloseBy. What this function does is takes hedged orders and reconciles the transactions as netted. This allows you to do some neat things we'll talk about in a minute, but for now it's important to understand that if you use this method you are not charged double fees since you are instructing the broker server to reconcile the hedge as a netting transaction.

eg. Buy 1 lot to open and Sell 1 lot to close. Profit = spread of sell price - buy price. Net commission = 1 lot (not 2). Net Profit = Profit - commission.

So why is this important? Well it's about risk management. Let's say you have 20 open positions and you want to close them down instantly. How do you do it?

Option 1: Close them one by one whilst crying into your keyboard because your profits are slipping away from waiting for each order to close and confirm....and on......and on........

Option 2: You send in a hedge. Wait until calm markets. Close both and get charged double fees.

Option 3: You send in a hedge. Close whenever you damn-well please by instructing the server to reconcile both transactions as net-closed and only get charged once.

What about reversing positions? Even if you're reversing a single order you still have to close one.........wait for confirmation.........open another. In the mean-time a full second could have passed and massive slippage accrued in the process. Reversing with hedging is instant when you send an order in that's net_position * 2 in the opposite direction. Then of course you use OrderCloseBy to reconcile the orders as partially closed - costing you nothing in the process.

Here is a proof of concept trade panel I made. It's not the prettiest panel out there, but it is the fastest!
IMPORTANT: This will not work with brokers that don't support hedging accounts.



Спасибо )

PANEL.jpg

Изменено пользователем DENYA
Ссылка на сообщение
Поделиться на другие сайты

  • Ответов 57
  • Создано
  • Последний ответ

Популярные авторы

Популярные авторы

Популярные посты

Как быстро добавить панель управления к индикатору и советнику Изменяем параметры эксперта с пользовательской панели "На лету" Графические интерфейсы III: Простые и многофункциональные кнопки (Глава 1

Перейти

Простой исходник торговой панели для советника с кнопками: Код: //+------------------------------------------------------------------+ //| TradeP

Перейти

Последняя версия библиотек EastAndFastGUI работающая под MT4. При обновлении терминала MT4 файлы в папках Canvas и Graphics заменяются более новыми версиями, что приводит к ошибкам компиляции. Поэтому

Перейти
Графический интерфейс - обмен опытом Опубликовано

Добрый день! Скажите как отключить крестик в панеле и можно ли его вообще убрать, что бы была одна кнопка свернуть???

Ссылка на сообщение
Поделиться на другие сайты

Графический интерфейс - обмен опытом Опубликовано
Andjee крестик отключается внутри стандартной библиотеки графических объектов (какой именно - незнаю), если хотите покопайтесь и обязательно найдёте.
Ссылка на сообщение
Поделиться на другие сайты

Графический интерфейс - обмен опытом Опубликовано (изменено)


Andjee крестик отключается внутри стандартной библиотеки графических объектов (какой именно - незнаю), если хотите покопайтесь и обязательно найдёте.



А можете рассказать как поменять цвет LABEL ???

сам разобрался!!!
Цитата

bool CTradePanel::CreateLabel(const long chart,const int subwindow,CLabel &object,const string text,const uint x,const uint y,label_align align, const color clr)
{
// 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;
}
//--- Adjust text
if(!object.Color(clr))
{
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;
}

Изменено пользователем Andjee
  • Лайк 2
Ссылка на сообщение
Поделиться на другие сайты

Графический интерфейс - обмен опытом Опубликовано (изменено)

Может кто знает - как реализовать вкладки на панели, чтоб их можно было переключать, что-то на подобии как в приведенном ниже примере?

Изменено пользователем bor-ix
Ссылка на сообщение
Поделиться на другие сайты

Графический интерфейс - обмен опытом Опубликовано
bor-ix готового элемента нет, поэтому нужно использовать кнопки и окна, управлять ими и т.д. - в рукапашную
Ссылка на сообщение
Поделиться на другие сайты

Графический интерфейс - обмен опытом Опубликовано


bor-ix готового элемента нет, поэтому нужно использовать кнопки и окна, управлять ими и т.д. - в рукапашную


0ll, я так понимаю это можно реализовать отображением части интерфейса или его скрытием за счет выбора нажатия кнопки...
т.е. при нажатии кнопки 1 - отображается информация 1, а информация 2 - не отображается,
при нажатии же кнопки 2 - все происходит в точности наоборот - информация 2 видна, а информация 1 - не отображается...
можно реализовать через оператор if:

if (button1 == trure && button2 == false)
{
рисуем инфо 1
}

if (button1 == false && button2 == trure)
{
рисуем инфо 2
}
Ссылка на сообщение
Поделиться на другие сайты

Графический интерфейс - обмен опытом Опубликовано

можно реализовать через оператор if


Добавлю:
if (button1 == trure && button2 == false)
{
скрываем инфо 2
рисуем инфо 1
}
  • Лайк 2
Ссылка на сообщение
Поделиться на другие сайты

  • 1 month later...
Графический интерфейс - обмен опытом Опубликовано

как поставить панель главной, что бы график на нее не накладывался??


Когда вы описываете объект там есть функция ObjectSetInteger, в ней есть индификатор OBJPROP_BACK, надо прописать false и БВС (Будет Вам Счастье)
Разжевано: там где вы описываете объект ( панель ), в этой функции вставить строчку "ObjectSetInteger(chart_ID,name,OBJPROP_BACK,false);" без кавычек, где chart_ID - ID графика(0-текущий график), name - имя метки(объекта)
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Графический интерфейс - обмен опытом Опубликовано

у меня так!!
TradePanel.Create(ChartID(),"TradePanel",0,20,20,250,230);

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);
поподробнее можно?

Ссылка на сообщение
Поделиться на другие сайты

Графический интерфейс - обмен опытом Опубликовано

поподробнее можно?


Можно:d
1)у вас есть функция 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);
2)внутри есть описание объекта в виде ObjectSetInteger(блаблаблабла...);
3)вставьте строчку там же ObjectSetInteger(chart,name,OBJPROP_BACK,false);

попробуйте, если что высылайте код, встрою)))
Ссылка на сообщение
Поделиться на другие сайты

Графический интерфейс - обмен опытом Опубликовано


попробуйте, если что высылайте код, встрою)))



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)
{

CAppDialog::Create(chart,name,subwin,x1,y1,x2,y2);

CreateButton(chart,subwin, TRAL,"TRAL",103,115,60,20);
CreateButton(chart,subwin, CloseAll,"CLOSE",33,115,60,20);

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)
{

CAppDialog::Create(chart,name,subwin,x1,y1,x2,y2);

CreateButton(chart,subwin, TRAL,"TRAL",103,115,60,20);
CreateButton(chart,subwin, CloseAll,"CLOSE",33,115,60,20);

return(true);
}



ищите функцию, скорее всего, у вас она будет выглядеть как bool Сreate () и вставляйте эту строчку ObjectSetInteger(chart,name,OBJPROP_BACK,false);
А вообще мы гадаем на кофейной гуще. Вам надо исходник в студию или искать функцию где описывается основная панель (ее параметры). Там должен быть индификатор OBJPROP_BACK, который отвечает за - объект на переднем (false) или заднем (true) плане.
Попробуйте в метаедиторе в верхнем правом угле (в поиске) вставить OBJPROP_BACK, и с помощью кнопки интер найти все строки где есть этот индификатор, если там стоит true (....OBJPROP_BACK,true....), то поставьте (....OBJPROP_BACK,false...)
ЗЫ. уже разжевал....Присылайте исходник, угадать очень сложно (если у Вас конечно не сверхсекретный и не сверхприбыльный совПанель), тогда лучше не надо, а то я стану обладателем и меня начнут разыскивать
Ссылка на сообщение
Поделиться на другие сайты

Графический интерфейс - обмен опытом Опубликовано


bool CTradePanel::Create(const long chart,const
ЗЫ. уже разжевал....Присылайте исходник, угадать очень сложно (если у Вас конечно не сверхсекретный и не сверхприбыльный совПанель), тогда лучше не надо, а то я стану обладателем и меня начнут разыскивать


и если еще получится, то можете убрать крестик(закрытие)....хочу оставить только сворачивание

Panel_3+.mq4

Ссылка на сообщение
Поделиться на другие сайты

Графический интерфейс - обмен опытом Опубликовано

и если еще получится, то можете убрать крестик(закрытие)....хочу оставить только сворачивание



Все настройки панели находятся в подключаемых библиотеках, а доступа у меня к ним нет. У меня панель не прозрачна))
Ссылка на сообщение
Поделиться на другие сайты

  • 1 month later...
Графический интерфейс - обмен опытом Опубликовано (изменено)

Andjee тут же дело не в прозрачности, а в отображении графика поверх или нет, настройка в терминале в свойствах.
хотя я наверное не совсем прав требуется, но стандартно лежат по пути ... \MQL4\Include
#include
#include
#include
в Button наверное значок закрытия есть.

Изменено пользователем NightTraider
Ссылка на сообщение
Поделиться на другие сайты

  • 5 months later...
Графический интерфейс - обмен опытом Опубликовано

Решил изучить более продвинутую торговую панель через ООП, честно, в нем не силен, всегда справлялся стандартными средствами.
Коллеги, подскажите, применил образец от ilnur17021992.
Проблема состоит в том, что в примере, когда тыкаешь на кнопку она должна подсветиться темным (действие нажатия) и вернуться к первоначальному состоянию (отжатие).
Но когда несколько раз подряд жмет на саму кнопку, то в какой то момент она зажимается, т.е. загорается нажатой и не отжимается. Я уже весь код терминала перерыл, не могу найти, как исправить эту явную ошибку.
В библиотеке Button есть функции CButton::OnMouseDown и CButton::OnMouseUp - но это не то. Нужно найти именно тот момент, который зажимает эту кнопку и заблокировать его, чтобы CButton::OnMouseUp сам справился и отжал ее после зажатия CButton::OnMouseDown.

Надеюсь доступно объяснил. Просто весь день уже ковыряю, уже начинаю нервничать )

Ссылка на сообщение
Поделиться на другие сайты

Графический интерфейс - обмен опытом Опубликовано

В свое время ковырялся с этой панелькой из примера. Затем делал свои инфо панели и торговые панели. И постоянно ловил глюки. А когда из одной панели открываешь другую - вообще полный финиш.
В результате перешел на библиотеку EasyAndFastGUI и ни разу не пожалел.
https://www.mql5.com/ru/code/19703

Сборку из последних версий библиотек MT5 работающую под MT4 и несколько картинок примеров реализации прилагаю.

EasyAndFastGUI.ZIP
Signal.jpg
TradeInfo.jpg
Profit.jpg
TradePanel.jpg
News.jpg

  • Лайк 3
Ссылка на сообщение
Поделиться на другие сайты

Графический интерфейс - обмен опытом Опубликовано

В результате перешел на библиотеку EasyAndFastGUI и ни разу не пожалел.


Да, я читал о ней, но у меня другая цель: сделать простую панель из нескольких кнопок, данный вариант чересчур усложнен дополнительной информацией, которая мне сейчас не нужна )
Ссылка на сообщение
Поделиться на другие сайты

Графический интерфейс - обмен опытом Опубликовано

Нисколько не навязывая библиотеку, просто для примера - панелька с 3 кнопками.

3_Buttons.ex4
3_Buttons.mq4

  • Лайк 2
  • Спасибо 1
Ссылка на сообщение
Поделиться на другие сайты

Графический интерфейс - обмен опытом Опубликовано

Нисколько не навязывая библиотеку, просто для примера - панелька с 3 кнопками.


Спасибо, если не решу вопрос с кнопками по той панели, придется переходить на эту, более современную.
Просто уже много написал по тем библиотекам, не хотелось бы с нуля все переделывать :)
Ссылка на сообщение
Поделиться на другие сайты

  • 10 months later...
Графический интерфейс - обмен опытом Опубликовано

Последняя версия библиотек EastAndFastGUI работающая под MT4. При обновлении терминала MT4 файлы в папках Canvas и Graphics заменяются более новыми версиями, что приводит к ошибкам компиляции. Поэтому после обновления терминала следует перезаписать эти файлы файлами из архива.

EasyAndFastGUI.zip

  • Лайк 1
  • Спасибо 3
Ссылка на сообщение
Поделиться на другие сайты

  • 4 weeks later...
Графический интерфейс - обмен опытом Опубликовано
В 28.03.2020 в 10:38, lova сказал:

Последняя версия библиотек EastAndFastGUI работающая под MT4. При обновлении терминала MT4 файлы в папках Canvas и Graphics заменяются более новыми версиями, что приводит к ошибкам компиляции. Поэтому после обновления терминала следует перезаписать эти файлы файлами из архива.

EasyAndFastGUI.zip 533 \u043a\u0411 · 13 загрузок

Чем оно отлично от последней версии под мт4 самого автора? 

Ссылка на сообщение
Поделиться на другие сайты

Графический интерфейс - обмен опытом Опубликовано

Автор начиная с какой-то версии забил на MT4. Поэтому пришлось извращаться, чтобы заставить последнюю версию автора для MT5 работать под MT4

Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Специальное предложение


  • Рекомендуемые брокеры

  • ×
    ×
    • Создать...