Добрый день уважаемые программисты, прошу вас помочь мне разобраться)
Вопрос заключается в следующем:
нужно переместить:
в
при условии что это всё должно находиться в:
И я не могу понять как это осуществить, кидаю but(); в OnChartEvent но тогда не правильная работа, нужно и туда и туда
Кому не сложно пожалуйста помогите)))
Вы бы рассказали что делает but();. В теории язык не запрещает использовать её и в OnTick() и в OnChartEventt() одновременно.
Вы бы рассказали что делает but();. В теории язык не запрещает использовать её и OnTick() и OnChartEventt() одновременно.
Спасибо за ответ, не знаю правильно вы меня поняли или нет, мне нужно чтобы код:
but(); - панель управления ордерами
находилась в
OnChartEventt()
т.к вся эта панель открывается через кнопку на экране
но она не корректно работает т.к должна находиться в:
OnTick()
и я спрашиваю, как сделать так чтобы она была и так и там(не просто туда и сюда вставить, а именно 1 раз использовалась but(); в OnChartEventt() и сразу же в OnTick()
Не знаю поняли вы меня или нет)) пожалуйста ответьте.
Спасибо
Спасибо за ответ, не знаю правильно вы меня поняли или нет, мне нужно чтобы код:
находилась в
т.к вся эта панель открывается через кнопку на экране
но она не корректно работает т.к должна находиться в:
и я спрашиваю, как сделать так чтобы она была и так и там(не просто туда и сюда вставить, а именно 1 раз использовалась but(); в OnChartEventt() и сразу же в OnTick()
Не знаю поняли вы меня или нет)) пожалуйста ответьте.
Спасибо
К сожалению, Вы не многословен). Как же Вас понять, если Вы толком ничего не объяснили... А да, ещё код выложили, где стандартный шаблон советника и названия функций, которые непонятно что выполняют. Здесь нет телепатов, хотите чтоб помогли, покажите код и дайте внятное описание проблемы.
Теперь по теме: если правильно понял, Вашу функцию лучше разбить на несколько функций, каждая из которых будет заниматься "своим делом".
я так и сделал, моя панель точно так же работает, но не корректно сама панель потому что код находится не в OnTick а в OnChartEventt()
Но без OnChartEventt() не работают кнопки, и ... не знаю как поставить и в OnChartEventt() и в OnTick
Иными словами, либо не правильно работает сама панель управления, либо она работает но не работают кнопки :)))
ребят помогите пожалуйста разобраться
//+------------------------------------------------------------------+ void OnTick() { but(); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void but() { proverca_sl_tp_ti(); proverca_br_tr(); if(ObjectFind(0,prefix+"TradeLine")!=0) // Если не создан обьект управления ButtonCreate(0,"TradeLine",0,5,15,90,7,0,"-------------------","Arial",10,clrBlack,C'236,233,216',clrNONE,false,false,true); // Создадим обьект управления меню int x0=(int)IntGetX ("TradeLine"); int y0=(int)IntGetY ("TradeLine"); ButtonCreate(0,"Lots",0,x0,y0+14,90,16,0,"LOTS "+DoubleToStr(glot,2),"Arial",10,clrBlack,C'236,233,216'); // Создадим кнопку лотов ButtonCreate(0,"Buy",0,x0,y0+34,90,16,0,"BUY","Arial",10,clrBlack,C'236,233,216'); // Создадим кнопку Бай ордеров ButtonCreate(0,"Sel",0,x0,y0+54,90,16,0,"SELL","Arial",10,clrBlack,C'236,233,216'); // Создадим кнопку Селл ордеров ButtonCreate(0,"BuyL",0,x0,y0+74,90,16,0,"BUY LIMIT","Arial",10,clrBlack,C'236,233,216'); // Создадим кнопку Бай лимит ордеров ButtonCreate(0,"SelL",0,x0,y0+94,90,16,0,"SELL LIMIT","Arial",10,clrBlack,C'236,233,216'); // Создадим кнопку Селл лимит ордеров ButtonCreate(0,"BuyS",0,x0,y0+114,90,16,0,"BUY STOP","Arial",10,clrBlack,C'236,233,216'); // Создадим кнопку Бай стоп ордеров ButtonCreate(0,"SelS",0,x0,y0+134,90,16,0,"SELL STOP","Arial",10,clrBlack,C'236,233,216'); // Создадим кнопку Селл стоп ордеров ButtonCreate(0,"ScreenShot",0,x0,y0+154,90,16,0,"SCREENSHOT","Arial",9,clrBlack,C'236,233,216'); // Создадим кнопку Скриншотов ButtonCreate(0,"TimeT",0,x0,y0+174,90,16,0,"Time","Arial",9,clrBlack,C'236,233,216'); // Создадим кнопку Скриншотов ChartRedraw(0); if(but_stat(prefix+"TimeT")==true) tim(); else obj_del("clock"); if(but_stat(prefix+"LOTS")==true) // Если нажата кнопка лотов { for(int i=0; i<=20; i++) { ButtonCreate(0,StringConcatenate("lot",i),0,x0+105,y0+15+20*i,50,18,0,DoubleToStr(wlot*(i+1),2),"Arial",10,clrBlack,C'236,233,216'); // Нарисуем 20 кнопок выбора лотов с лотами if(but_stat(StringConcatenate(prefix,"lot",i))==true) // Определим какая кнопка нажата { glot=wlot*(i+1); // Запомним лот кнопки button_off(StringConcatenate("lot",i)); // Отожмем кнопку выбора лотов с выбранным лотом button_off("LOTS"); // Отожмем кнопку выбора лотов } } } else // Иначе for(int xx=0; xx<=20; xx++) ObjectDelete(StringConcatenate(prefix,"lot",xx)); // Удалим все кнопки ChartRedraw(0); double Dist=NormalizeDouble(Stop_Limit*_Point,_Digits); if(but_stat(prefix+"Buy")==true) // Если нажата кнопка if(openorders(_Symbol,0,glot)==true) // откроем ордер button_off("Buy"); // Переведем кнопку в отключенное состояние if(but_stat(prefix+"Sel")==true) // Если нажата кнопка if(openorders(_Symbol,1,glot)==true) // откроем ордер button_off("Sel"); // Переведем кнопку в отключенное состояние if(but_stat(prefix+"BuyL")==true) // Если нажата кнопка if(openorders(_Symbol,2,glot,Ask-Dist)==true) // откроем орде button_off("BuyL"); // Переведем кнопку в отключенное состояние if(but_stat(prefix+"SelL")==true) // Если нажата кнопка if(openorders(_Symbol,3,glot,Bid+Dist)==true) // откроем орде button_off("SelL"); // Переведем кнопку в отключенное состояние if(but_stat(prefix+"BuyS")==true) // Если нажата кнопка if(openorders(_Symbol,4,glot,Ask+Dist)==true) // откроем орде button_off("BuyS"); // Переведем кнопку в отключенное состояние if(but_stat(prefix+"SelS")==true) // Если нажата кнопка if(openorders(_Symbol,5,glot,Bid-Dist)==true) // откроем орде button_off("SelS"); // Переведем кнопку в отключенное состояние for(int i=OrdersTotal()-1; i>=0; i--) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) if(OrderMagicNumber()==Magic || Magic==-1) if(OrderSymbol()==_Symbol) { x=y=0;ChartTimePriceToXY(0,0,(OrderOpenTime()),OrderOpenPrice(),x,y); // Вернем в пикселях координаты цены и времени открытия ордера if(ObjectFind(StringConcatenate(prefix+"Re",OrderTicket()))!=0) // Если нет кнопки управления меню ордеров ButtonCreate(0,StringConcatenate("Re",OrderTicket()),0,x,y,ButX+5,BuyY,0,"< >","Arial",8,clrBlack,C'236,233,216',clrNONE,false,false,true,true,0,"Move the menu"); // Создадим обьект SetX(StringConcatenate(prefix+"Re",OrderTicket()),y); // Кнопка всегда должна быть на уровне цены открытия ордера int x2=(int)IntGetX (StringConcatenate("Re",OrderTicket())); // Запросим координаты Х обьекта управления меню ордеров int y2=(int)IntGetY (StringConcatenate("Re",OrderTicket())); // Запросим координаты У обьекта управления меню ордеров ButtonCreate(0,StringConcatenate("Sl",OrderTicket()),0,x2+25,y2,ButX,BuyY,0,"Sl","Arial",8,clrBlack,C'236,233,216',clrNONE,false,false,false,true,0,"StopLoss"); // Создадим кнопку стоп лосса ButtonCreate(0,StringConcatenate("Tp",OrderTicket()),0,x2+45 ,y2,ButX,BuyY,0,"Tp","Arial",8,clrBlack,C'236,233,216',clrNONE,false,false,false,true,0,"TakeProfit"); // Создадим кнопку тейк профита ButtonCreate(0,StringConcatenate("Br",OrderTicket()),0,x2+65 ,y2,ButX,BuyY,0,"Br","Arial",8,clrBlack,C'236,233,216',clrNONE,false,false,false,true,0,"Breakeven"); // Создадим кнопку безубытка ButtonCreate(0,StringConcatenate("Tr",OrderTicket()),0,x2+85 ,y2,ButX,BuyY,0,"Tr","Arial",8,clrBlack,C'236,233,216',clrNONE,false,false,false,true,0,"Ttrailing Stop"); // Создадим кнопку трейлинг стопа ButtonCreate(0,StringConcatenate("Ti",OrderTicket()),0,x2+105,y2,ButX,BuyY,0,"Ti","Arial",8,clrBlack,C'236,233,216',clrNONE,false,false,false,true,0,"Time Close"); // Создадим кнопку для времени жизни ордера ButtonCreate(0,StringConcatenate("Xx",OrderTicket()),0,x2+125,y2,ButX,BuyY,0,"X","Arial",8,clrBlack,C'236,233,216',clrNONE,false,false,false,true,0,"Close Order"); // Создадим кнопку закрытия/удаления ордера } // --- Создадим переменные int tik=-1,typ=-1; string nameX="",nameTP="",nameSL="",nameBR="",nameTR="",nameTI=""; double op=0; for(int i=OrdersTotal()-1; i>=0; i--) // Цикл перебора ордеров if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) // Разбор ордера на части if(OrderMagicNumber()==Magic || Magic==-1) // Проверка на мейджик номер if(OrderSymbol()==_Symbol) // Проверка на символ ордера { tik=OrderTicket(); // Запомним тиккет typ=OrderType(); // Запомним тип ордера op=OrderOpenPrice(); // Запомним цену открытия ордера nameX =StringConcatenate(prefix,"Xx",tik); // Создадим имя для кнопки закрытие ордеров nameTP=StringConcatenate(prefix,"Tp",tik); // Создадим имя для кнопки тейк профита nameSL=StringConcatenate(prefix,"Sl",tik); // Создадим имя для кнопки стоп лосса nameBR=StringConcatenate(prefix,"Br",tik); // Создадим имя для кнопки безубытка nameTR=StringConcatenate(prefix,"Tr",tik); // Создадим имя для кнопки трейлинг стопа nameTI=StringConcatenate(prefix,"Ti",tik); // Создадим имя для кнопки закрытия по времени if(ObjectGetInteger(0,nameX,OBJPROP_STATE)==true) closeorders(tik); // Если нажата кнопка крестик закроем или удалим ордер if(typ==0 ) { if(but_stat(nameTP)==true) // Если нажата кнопка тейк профит obj_cre(StringConcatenate("tp",tik),(Ask+tp),clrGreen); // Высавим метку else // Иначе obj_del(StringConcatenate("tp",tik)); // Удалим метку if(but_stat(nameSL)==true) // Если нажата кнопка стоп лосса obj_cre(StringConcatenate("sl",tik),(Bid-sl),clrRed); // Высавим метку else // Иначе obj_del(StringConcatenate("sl",tik)); // Удалим метку } if(typ==1 ) { if(but_stat(nameTP)==true) // Если нажата кнопка тейк профит obj_cre(StringConcatenate("tp",tik),(Bid-tp),clrGreen); // Высавим метку else // Иначе obj_del(StringConcatenate("tp",tik)); // Удалим метку if(but_stat(nameSL)==true) // Если нажата кнопка стоп лосса obj_cre(StringConcatenate("sl",tik),(Ask+sl),clrRed); // Высавим метку else // Иначе obj_del(StringConcatenate("sl",tik)); // Удалим метку } if(typ==2 || typ==4) { if(but_stat(nameTP)==true) // Если нажата кнопка тейк профит obj_cre(StringConcatenate("tp",tik),(op+tp),clrGreen); // Высавим метку else // Иначе obj_del(StringConcatenate("tp",tik)); // Удалим метку if(but_stat(nameSL)==true) // Если нажата кнопка стоп лосса obj_cre(StringConcatenate("sl",tik),(op-sl),clrRed); // Высавим метку else // Иначе obj_del(StringConcatenate("sl",tik)); // Удалим метку } if(typ==3 || typ==5) { if(but_stat(nameTP)==true) // Если нажата кнопка тейк профит obj_cre(StringConcatenate("tp",tik),(op-tp),clrGreen); // Высавим метку else // Иначе obj_del(StringConcatenate("tp",tik)); // Удалим метку if(but_stat(nameSL)==true) // Если нажата кнопка стоп лосса obj_cre(StringConcatenate("sl",tik),(op+sl),clrRed); // Высавим метку else // Иначе obj_del(StringConcatenate("sl",tik)); // Удалим метку } if(but_stat(nameBR)==true) // Если нажата кнопка безубытка { if(((Ask-br)>op) && typ==0) obj_cre(StringConcatenate("br",tik),op,clrGreen); // Высавим метку безубытка if(((Bid+br)<op) && typ==1) obj_cre(StringConcatenate("br",tik),op,clrGreen); // Высавим метку безубытка } else obj_del(StringConcatenate("br",tik)); // Удалим метку безубытка if(but_stat(nameTR)==true) // Если нажата кнопка трейлинг стопа { if(((Ask-tr)>op) && typ==0) obj_cre(StringConcatenate("tr",tik),op,clrGreen); // Высавим метку трейлинг стопа if(((Bid+tr)<op) && typ==1) obj_cre(StringConcatenate("tr",tik),op,clrGreen); // Высавим метку трейлинг стопа } else obj_del(StringConcatenate("tr",tik)); // Удалим метку трейлинг стопа if(but_stat(nameTI)==true) // Если нажата кнопка время жизни ордера obj_cre_v_line(StringConcatenate("ti",tik),clrGreen); // Высавим метку else // Иначе obj_del(StringConcatenate("ti",tik)); // Удалим метку } his_del_obj(); // Функция удаляет обьекты закрытых или удаленных ордеров uroven(); // Функция для перетаскивания ордеров }
Помогите пожалуйста вот этот пример занести в кнопку, при условии чтобы сама панель корректно работала как и сейчас
В коде который Вы прикрепили выше присутствует кнопка сворачивания/разворачивания панели? Если да какое у неё имя?
Ещё проверьте все места где Вы создаёте имя объекту с помощью StringConcatenate(...), например:
if(ObjectFind(StringConcatenate(prefix+"Re",OrderTicket()))!=0) // Если нет кнопки управления меню ордеров ButtonCreate(0,StringConcatenate("Re",OrderTicket()),0,x,y,ButX+5,BuyY,0,"< >","Arial",8,clrBlack,C'236,233,216',clrNONE,false,false,true,true,0,"Move the menu"); // Создадим обьект
обратите внимание на выделенное. Судя по тому что везде присутствует "Re" это должно бы быть имя одного и того же объекта, но по факту это не так. И таких ошибок в коде много.
В коде который Вы прикрепили выше присутствует кнопка сворачивания/разворачивания панели? Если да какое у неё имя?
Ещё проверьте все места где Вы создаёте имя объекту с помощью StringConcatenate(...), например:
обратите внимание на выделенное. Судя по тому что везде присутствует "Re" это должно бы быть имя одного и того же объекта, но по факту это не так. И таких ошибок в коде много.
Спасибо, да вы правы) но на эти ошибки сейчас нет толку, пожалуйста помогите с главной проблемой
Могли бы вы добавить
void but()
{
///
}
в кнопку
Понимаете проблема состоит в том что кнопка работает правильно только в OnChartEventt()
а панель ( тобишь but();) правильно работает только если находится в OnTick()
и вот незадача я не знаю как из неё выйти
Пожалуйста подскажите хоть что-нибудь
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день уважаемые программисты, прошу вас помочь мне разобраться)
Вопрос заключается в следующем:
нужно переместить:
в
при условии что это всё должно находиться в:
OnChartEvent
И я не могу понять как это осуществить, кидаю but(); в OnChartEvent но тогда не правильная работа, нужно и туда и туда
Кому не сложно пожалуйста помогите)))
void but() { ...... }