2 действия с 1 кнопки клавиатуры, как реализовать? - страница 2

 
if (ObjectGetInteger(0,"MEGA",OBJPROP_TIMEFRAMES)==OBJ_NO_PERIODS)
   draw=false;
else
   draw=true;

можно так

 
Taras Slobodyanik:

можно так

Спасибо еще раз!!! а я уже думал все варианты испробывал))) СПасибо)

 
Taras Slobodyanik:

если к каждому объекту своя кнопка, то да проверять каждый объект для каждой кнопки

//--- Проверка условий показывать/не показывать
   if (ObjectGetInteger(0,"1",OBJPROP_TIMEFRAMES)==OBJ_NO_PERIODS), (ObjectFind(0,"PS")>=0)
      draw=false;
   else
      draw=true;
//--- Проверка условий показывать/не показывать

повторно всё это писать? ответьте пожалуйста

 

смотря что вам нужно

объекты можно проверять в цикле, перебирая всё по очереди (так же как и создавать)

 
Taras Slobodyanik:

смотря что вам нужно

объекты можно проверять в цикле, перебирая всё по очереди (так же как и создавать)

Пожалуйста помогите последний раз, уже мучуюсь, кажется все перепробывал, как мне заставить теперь на 2-ю кнопку тоже самое:
Сейчас переключение работает, но при смене ТФ приходится так же нажимать 2 раза

//--- Проверка условий показывать/не показывать
   if (ObjectGetInteger(0,"By_Buy",OBJPROP_TIMEFRAMES)>=0)
      draw2=false;
   else
      draw2=true;
//--- Проверка условий показывать/не показывать

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

Ниже код можете не смотреть, т.е переключение работает, но при смене ТФ....

Вот так я переключаюсь:

      //--- Уровень безубытка
      if(lparam==(StringGetChar(Show_true1,0)))
      {
         if (sound) PlaySound(sound_Zona);
         if(draw2)
              {
                  double PB = ProfitPrice(Symbol(), OP_BUY,  Магик_для_советников, Профит);
                  double PS = ProfitPrice(Symbol(), OP_SELL, Магик_для_советников, Профит);
                  SetPriceLine(PB, "By_Buy",  Цвет_безубытка_бай);
                  SetPriceLine(PS, "By_Sell", Цвет_безубытка_селл);       
                  draw2=false;
            }
         else
            {
                  ProfitPrice2(Symbol(), Магик_для_советников, Профит);     
                  draw2=true;
           }
      }
      //--- Уровень безубытка

Вот весь код:

//--- Уровень безубытка
double ProfitPrice(string fSymbol, int fType, int fMagic=0, double MyProfit=0.0){
   //Функция возвращает цену, на которую необходимо установить уровень TakeProfit, чтобы получить прибыль MyProfit
   double SummPrice=0.0, SummLots=0.0, Formula=0.0, SummLoss=0.0;
   int k;
   int total = OrdersTotal();
   for (int y = total-1; y >= 0; y--) {
      int namber =OrderSelect(y, SELECT_BY_POS, MODE_TRADES);
      if(OrderSymbol()==fSymbol) {
         if(OrderMagicNumber()==fMagic || fMagic==0) {
            if(OrderType()==fType) {
               k++;
               SummLots=SummLots+OrderLots();
               SummPrice=SummPrice+OrderOpenPrice()*OrderLots();
               SummLoss=SummLoss+OrderCommission()+OrderSwap();
            }
         }
      }
   }//Next y  
   
   if(k>0){
      if(fType==OP_BUY){
         Formula = SummPrice/SummLots + 
         (MyProfit-SummLoss) * MarketInfo(fSymbol, MODE_POINT) / 
         (MarketInfo(fSymbol, MODE_TICKVALUE) * SummLots);
      } else {
         Formula = SummPrice/SummLots - 
         (MyProfit-SummLoss) * MarketInfo(fSymbol, MODE_POINT) / 
         (MarketInfo(fSymbol, MODE_TICKVALUE) * SummLots);
      }
   }
   
   return(Formula);
}//ProfitPrice()
//+------------------------------------------------------------------+
void ProfitPrice2(string fSymbol, int fMagic=0, double MyProfit=0.0){
   double BuyLots=0.0, SellLots=0.0, BuyProfit=0.0, SellProfit=0.0, BuyPrice=0.0, SellPrice=0.0;
   int total = OrdersTotal();
   for (int y = total-1; y >= 0; y--) {
      int namber =OrderSelect(y, SELECT_BY_POS, MODE_TRADES);
      if(OrderSymbol()==fSymbol) {
         if(OrderMagicNumber()==fMagic || fMagic==0) {
            if(OrderType()==OP_BUY){
               BuyLots = BuyLots + OrderLots();
               BuyProfit = BuyProfit + OrderProfit() + OrderCommission() + OrderSwap();
            }else if(OrderType()==OP_SELL){
               SellLots = SellLots + OrderLots();
               SellProfit = SellProfit + OrderProfit() + OrderCommission() + OrderSwap();
            }
         }
      }
   }//Next y  
   double TickValue = MarketInfo(fSymbol, MODE_TICKVALUE);
   if ((BuyLots - SellLots) > 0) {
      BuyPrice = Bid - ((BuyProfit + SellProfit - MyProfit) / (TickValue * (BuyLots - SellLots)) * Point);
   }
   if ((SellLots - BuyLots) > 0) {
      SellPrice = Ask + ((BuyProfit + SellProfit - MyProfit) / (TickValue * (SellLots - BuyLots)) * Point);
   }
   if((BuyLots - SellLots) == 0.0){
      if(BuyLots>0) BuyPrice = Bid - ((BuyProfit + SellProfit - MyProfit) / (TickValue * BuyLots) * Point); //уровень безубытка для всех BUY ордеров
      if(SellLots>0) SellPrice = Ask + ((SellProfit + BuyProfit - MyProfit) / (TickValue * SellLots) * Point); //уровень безубытка для всех SELL ордеров
   }
   SetPriceLine(BuyPrice, "By_Buy", Цвет_безубытка_бай);
   SetPriceLine(SellPrice, "By_Sell", Цвет_безубытка_селл);   
}//ProfitPrice2()
//+------------------------------------------------------------------+
void SetPriceLine(double Price=0.0, string NameLine = "MyLine", color ColorLine = DarkOliveGreen){
   int indWnd=0;
   //hWnd = WindowFind(window);
   if (ObjectFind(NameLine)==-1) ObjectCreate(NameLine, OBJ_HLINE, indWnd, 0, Price);
   if(Price==0.0){
      ObjectDelete(NameLine);
   }else{
      ObjectSet(NameLine, OBJPROP_PRICE1, Price);
      ObjectSet(NameLine, OBJPROP_COLOR, ColorLine);
      ObjectSet(NameLine, OBJPROP_SELECTABLE, false);
      ObjectSet(NameLine, OBJPROP_HIDDEN, true);
   }
}//SetPriceLine()
//--- Уровень безубытка
 

Не вижу первой кнопки.

там также?

//--- Проверка условий показывать/не показывать
   if (ObjectGetInteger(0,"By_Buy",OBJPROP_TIMEFRAMES) >= 0)
      draw2=false;
   else
      draw2=true;
//--- Проверка условий показывать/не показывать

перед этим было наоборот, если объект скрыт то false, а сейчас true

 
Taras Slobodyanik:

Не вижу первой кнопки.

там также?

перед этим было наоборот, если объект скрыт то false, а сейчас true

нет, всеравно при смене ТФ приходится 2 раза нажимтаь

вот 2-е кнопки:

//--- Проверка условий показывать/не показывать
   if (ObjectGetInteger(0,"By_Buy",OBJPROP_TIMEFRAMES) >= 0)
      draw=false;
   else
      draw=true;
//--- Проверка условий показывать/не показывать
   
   
//--- Проверка условий показывать/не показывать
   if (ObjectGetInteger(0,"1",OBJPROP_TIMEFRAMES)==OBJ_NO_PERIODS)
      draw=false;
   else
      draw=true;
//--- Проверка условий показывать/не показывать

Вот так не работает:

//--- Проверка условий показывать/не показывать
   if (ObjectGetInteger(0,"By_Buy",OBJPROP_TIMEFRAMES) >= 0)
      draw=false;
   else
      draw=true;
//--- Проверка условий показывать/не показывать
//--- Проверка условий показывать/не показывать
   if (ObjectGetInteger(0,"By_Buy",OBJPROP_TIMEFRAMES)==OBJ_NO_PERIODS)       draw=false;    else       draw=true; //--- Проверка условий показывать/не показывать       //--- Проверка условий показывать/не показывать    if (ObjectGetInteger(0,"By_Buy",OBJPROP_TIMEFRAMES)==OBJ_NO_PERIODS)       draw=true;    else       draw=false; //--- Проверка условий показывать/не показывать При добавлении draw2(буул) //--- Проверка условий показывать/не показывать    if (ObjectGetInteger(0,"By_Buy",OBJPROP_TIMEFRAMES)==OBJ_NO_PERIODS)       draw2=true;    else       draw2=false; //--- Проверка условий показывать/не показывать
 
Taras Slobodyanik:

тут получается что всегда присутствует By_Buy, при повторном просто добавляется линия: By_Sell

Может поэтому не получается

 
не могу ничего сказать - вижу каждый раз разные куски кода)
что там и как - нужно вызывать телепатов)
 
Taras Slobodyanik:
не могу ничего сказать - вижу каждый раз разные куски кода)
что там и как - нужно вызывать телепатов)

МОгу ли я вам полный код кинуть, посмотрите? я вроди как и так полный код кинул

Причина обращения: