Помощь в кодировании - страница 722

 
Tigra:


В данном индикаторе есть некоторые проблемы при использовании 4-х значных котировок. Но это не критично, проблема в шкале при 4-х значной котировке до уровня 100, пробовал показывать картинками, смотреть в нужное время очень напрягает глаза (через несколько дней, не стоит ли как нить изменить шкалу до уровня 40 - лучше бы были видны гистограммы и в правом углу текст, который бы указывал на текущее значение?

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

У этого индикатора есть некоторые проблемы при использовании 4 значных котировок. Но это не критично, самая проблема это масштабирование на 4 значном до уровня 100, постарался показать на картинках, разглядывать нужный момент весьма напрягает глаза( после нескольких дней, можно ли как нить поменять масштаб до уровня 40 - что бы лучше было видно гистограммы и в правом углу текстом что бы обозначалось текущее значение? Еще не могу понять, почему появляються черные гистограммы поверх при увеличении (

Разве это не ремонтник?
 

Младен,

Я работаю с MT5.

У меня есть "простая функция трейлинга", которую мне нужно преобразовать в "трейлинг с шагом", не могли бы вы дать совет?

в советнике у меня есть
===================
вход "Трейлинг" (по пунктам)

=> пример:
трейлинг: 4000 (4 пункта)
(старый метод) если цена переместилась на 4 пункта, переместить стоплосс на 4 пункта

но мне нужно изменить на

===================
input "Трейлинг (расстояние) в пунктах"
input "Trailing (Step) in points"

=> пример:
расстояние трейлинга: 4000 (4 пункта)
шаг трейлинга: 1500 (1,5 пункта)

(новый метод) если цена переместилась на 4 пункта, переместите стоплосс на 1,5 пункта.

//+------------------------------------------------------------------+
//| Simple Trailing function                                         |
//+------------------------------------------------------------------+
void fSimpleTrailing(){
   if(Trailing<=0){
      return;
   }        
   if(!Pos.Select(_Symbol)){
      return;
   }        
   if(!Sym.RefreshRates()){
      return;  
   }  
   double nsl,tmsl,psl;  
   switch(Pos.PositionType()){
      case POSITION_TYPE_BUY:
         nsl=Sym.NormalizePrice(Sym.Bid()-_Point*Trailing);
            if(nsl>=Sym.NormalizePrice(Pos.PriceOpen())){
               if(nsl>Sym.NormalizePrice(Pos.StopLoss())){
                  tmsl=Sym.NormalizePrice(Sym.Bid()-_Point*Sym.StopsLevel());
                     if(nsl<tmsl){
                        Trade.PositionModify(_Symbol,nsl,Pos.TakeProfit());
                     }
               }
            }
      break;
      case POSITION_TYPE_SELL:
         nsl=Sym.NormalizePrice(Sym.Ask()+_Point*Trailing);
            if(nsl<=Sym.NormalizePrice(Pos.PriceOpen())){
               psl=Sym.NormalizePrice(Pos.StopLoss());
                  if(nsl<psl || psl==0){
                     tmsl=Sym.NormalizePrice(Sym.Ask()+_Point*Sym.StopsLevel());
                        if(nsl>tmsl){
                           Trade.PositionModify(_Symbol,nsl,Pos.TakeProfit());
                        }
                  }
            }      
      break;
   }
}
 
nbtrading:
Разве это не пересчетчик?

Да, он пересчитывает, но цвет не важен в этом показателе, для меня он очень хорошо проявляется.
 
baraozemo:

Младен,

Я работаю с MT5.

У меня есть "простая функция трейлинга", которую мне нужно преобразовать в "трейлинг с шагом", не могли бы вы дать совет?

в советнике у меня есть
===================
вход "Трейлинг" (по пунктам)

=> пример:
трейлинг: 4000 (4 пункта)
(старый метод) если цена переместилась на 4 пункта, переместить стоплосс на 4 пункта

но мне нужно изменить на

===================
input "Трейлинг (расстояние) в пунктах"
input "Trailing (Step) in points"

=> пример:
расстояние трейлинга: 4000 (4 пункта)
шаг трейлинга: 1500 (1,5 пункта)

(новый метод) если цена переместилась на 4 пункта, переместите стоплосс на 1,5 пункта.

//+------------------------------------------------------------------+
//| Simple Trailing function                                         |
//+------------------------------------------------------------------+
void fSimpleTrailing(){
   if(Trailing<=0){
      return;
   }        
   if(!Pos.Select(_Symbol)){
      return;
   }        
   if(!Sym.RefreshRates()){
      return;  
   }  
   double nsl,tmsl,psl;  
   switch(Pos.PositionType()){
      case POSITION_TYPE_BUY:
         nsl=Sym.NormalizePrice(Sym.Bid()-_Point*Trailing);
            if(nsl>=Sym.NormalizePrice(Pos.PriceOpen())){
               if(nsl>Sym.NormalizePrice(Pos.StopLoss())){
                  tmsl=Sym.NormalizePrice(Sym.Bid()-_Point*Sym.StopsLevel());
                     if(nsl<tmsl){
                        Trade.PositionModify(_Symbol,nsl,Pos.TakeProfit());
                     }
               }
            }
      break;
      case POSITION_TYPE_SELL:
         nsl=Sym.NormalizePrice(Sym.Ask()+_Point*Trailing);
            if(nsl<=Sym.NormalizePrice(Pos.PriceOpen())){
               psl=Sym.NormalizePrice(Pos.StopLoss());
                  if(nsl<psl || psl==0){
                     tmsl=Sym.NormalizePrice(Sym.Ask()+_Point*Sym.StopsLevel());
                        if(nsl>tmsl){
                           Trade.PositionModify(_Symbol,nsl,Pos.TakeProfit());
                        }
                  }
            }      
      break;
   }
}
Если цена двигалась по сравнению с : чем?
 
mladen:
Если цена двигалась по сравнению с : что?

перед вызовом функции у вас есть

если цена "растет", вы проверяете "расстояние" в пунктах... если оно совпадает с "расстоянием", вы перемещаете стоплосс с шагом (в пунктах)

пример:

стоплосс =8000
расстояние трейлинга = 4000
шаг трейлинга = 2000

вы покупаете по цене 10000

теперь цена 14000 (расстояние между трейлингом и целью = 4000), теперь нужно переместить стоплосс на 6000 (8000 - шаг трейлинга)

теперь цена 18000 (цель достигнута=4000), теперь нужно переместить стоплосс на 2000 (6000 - шаг трейлинга)

теперь цена 22000 (цель достигнута=4000), теперь нужно передвинуть стоплосс на "вход" + 2000 (2000 - шаг трейлинга =-2000)

теперь цена 24000 (цель достигнута = 4000), теперь вам нужно переместить стоплосс на "вход" + 6000 (-2000 - шаг трейлинга =-6000).

 
baraozemo:

перед вызовом функции у вас есть

если цена "растет", вы проверяете "расстояние" в пунктах... если оно совпадает с "расстоянием", вы перемещаете стоплосс с шагом (в пунктах)

пример:

стоплосс =8000
расстояние трейлинга = 4000
шаг трейлинга = 2000

вы покупаете по цене 10000

теперь цена 14000 (расстояние между трейлингом и целью = 4000), теперь вам нужно переместить стоплосс на 6000 (8000 - шаг трейлинга)

теперь цена 18000 (расстояние между трейлингом и целью = 4000), теперь вам нужно переместить стоплосс на 2000 (6000 - шаг трейлинга)

теперь цена 22000 (расстояние между трейлингом и целью = 4000), теперь вам нужно переместить стоплосс на "вход" + 2000 (2000 - шаг трейлинга =-2000)

теперь цена 24000 (цель достигнута=4000), теперь нужно переместить стоплосс на "вход" + 6000 (-2000 - шаг трейлинга =-6000)

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

Здравствуйте,

Я хотел бы написать функцию, которая рисует стрелку. Я бы хотел, чтобы стрелка была плавающей. Есть идеи? :)

void DrawArrow(string name, int IdSymbol, int x, int y, int width, int corner, color clr)
{
   ObjectCreate(0,name,OBJ_ARROW,0,0,0,0,0);
      ObjectSetInteger(0,name,OBJPROP_ARROWCODE,IdSymbol);
      ObjectSetInteger(0,name,OBJPROP_CORNER,corner);
      ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
      ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
      ObjectSetInteger(0, name, OBJPROP_COLOR, clr);
      ObjectSetInteger(0,name,OBJPROP_WIDTH,width);
      ChartRedraw(0);
}

 
mladen:
Да, но если вы не записали его (как это обычно бывает с ценами стоп-лосс или тейк-профит: когда они изменяются, они начинают быть критерием для другого изменения), вы вынуждены иметь это в переменных, и это не является чем угодно, но не доказательством ошибок. То, что вы пытаетесь сделать, не может быть повторено кодом, или вам придется жестко кодировать эти стопы для каждого случая, что делает его непригодным для любой открытой цены, которая не точно совпадает с жестко закодированными ценами.

Привет, Младен,

вот образец ea

Файлы:
sample-ea.mq5  36 kb
 
Tartut:

Здравствуйте,

Я хотел бы написать функцию, которая рисует стрелку. Я бы хотел, чтобы стрелка была плавающей. Есть идеи? :)

void DrawArrow(string name, int IdSymbol, int x, int y, int width, int corner, color clr)
{
   ObjectCreate(0,name,OBJ_ARROW,0,0,0,0,0);
      ObjectSetInteger(0,name,OBJPROP_ARROWCODE,IdSymbol);
      ObjectSetInteger(0,name,OBJPROP_CORNER,corner);
      ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
      ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
      ObjectSetInteger(0, name, OBJPROP_COLOR, clr);
      ObjectSetInteger(0,name,OBJPROP_WIDTH,width);
      ChartRedraw(0);
}

Что означает "плавающая" стрелка?

PS: объекты стрелки не используют координаты x и y или угол. Они используют время и цену

 

здравствуйте, мистер Младен

пожалуйста, сделайте MTF к нему

с уважением

Файлы: