Jump to content

Общие вопросы по языку MQL


Recommended Posts

sviter

у меня есть такой, но он ругaется на неправильные стопы:

       

if(OrderType() == OP_BUY) 
          {
        if(NormalizeDouble(Ask  -  OrderStopLoss(),  Digits) > NormalizeDouble(dist * _Point,  Digits)) 
        tiketMod = OrderModify(OrderTicket(),  0,  Ask - dist,  OrderTakeProfit(),  0,  Blue);
          }

else if(OrderType() == OP_SELL) 
          {
        if(NormalizeDouble(OrderStopLoss()  -  Bid, Digits) > NormalizeDouble(dist * _Point,  Digits))
        tiketMod = OrderModify(OrderTicket(),  0,  Bid + dist,  OrderTakeProfit(),  0,  Blue);
          }

Edited by sviter
Link to post
Share on other sites
  • Replies 7.6k
  • Created
  • Last Reply

Top Posters In This Topic

  • AntFX

    577

  • sergey1294

    569

  • Ugar68

    517

  • Programmer

    419

Top Posters In This Topic

Popular Posts

Ну, в данном случае мне стоило бы сразу соблюдать простейшие приёмы защитного программирования, то есть проверять, не равна ли нулю переменная, оказавшаяся под знаком деления. Ведь она "чужая", то ест

На счёт проверок, это правильно. Я больше очень практикую, то же нарывался. Но в моём случае у меня советник открывал ордер минимальным лотом вместо нормального, когда замечал, доливаться было поздно.

Основной советник выставляет "сигнальный" отложенный ордер далеко от текущей цены и каждую например, минуту модифицирует у него время экспирации: это может быть текущее время плюс 1 час, или плюс 1 су

Posted Images

Ugar68

А что бы не ругался на неправильные стопы, надо:

1. Нормировать стоп.

2. На случай задания слишком маленькой дистанции, перед модификацией проверить стоп на корректность. Это не обязательно если не будут использоваться очень маленькие дистанции, или на счетах ECN.

Трейлинг тралит стоп даже если он не в прибыли. Выглядит как то так:

double osl=OrderStopLoss();

if(OrderType()==OP_BUY)//Если ордер Buy
         {
         sl=Bid-dist*Point;//уровень стопа
         //Проверка надобности переноса стопа
         if(sl-osl>0.6*Point)
            {
            //Перенос стопа

            ResetLastError();
            if(!OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(sl,Digits),OrderTakeProfit(),0,clrBlue))

              {

              Print("Ошибка переноса стопа ",_LastError);

              }
            }
         }
      if(OrderType()==OP_SELL)//Если ордер Sell
         {
         sl=Ask+dist*Point;//уровень стопа
         //Проверка надобности переноса стопа
         if(osl-sl>0.6*Point || osl<Point)
            {
            ResetLastError();
            //Перенос стопа
            if(!OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(sl,Digits), OrderTakeProfit(),0,clrRed))

              {

              Print("Ошибка переноса стопа ",_LastError);

              }
            }
         }

  • Upvote 1

Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку.
Чужие программы не переделываю.

Link to post
Share on other sites
torgf

Помогите.

Лот =0.1
Стоп лосс– 100 пунктов
Тейк профит =500 пунктов
Как рассчитанть лот следующей позиции чтобы после убытка (Стоп лосс) компенсировать убыток сверх профита.
Грубо говоря Тейк профит в настройках =500 а получиться денег при достижении профита должно как будто в настройках Тейк профит =600 

Link to post
Share on other sites
Fargoth
19 часов назад, torgf сказал:

Помогите.

Лот =0.1
Стоп лосс– 100 пунктов
Тейк профит =500 пунктов
Как рассчитанть лот следующей позиции чтобы после убытка (Стоп лосс) компенсировать убыток сверх профита.
Грубо говоря Тейк профит в настройках =500 а получиться денег при достижении профита должно как будто в настройках Тейк профит =600 

Лот = 0.12

Link to post
Share on other sites
torgf
3 часа назад, Fargoth сказал:

Лот = 0.12

Гениально!

Link to post
Share on other sites
  • 2 weeks later...
sviter
Здраствуйте! Использую стратегию торговли по тренду... вот допустим я использую Moving Average с периодом 21... и если свеча закрылась выше или ниже линии, то открывается ордер.... Подскажите как ограничить открытие ордеров на каждой свече... Я хочу что бы если свеча была выше или ниже линии МА, то отрывалось только 2 ордера на первых свечах после пересечения и больше не открывалось на остальных.... ???
 
PHP код:
Ma=iMA(NULL,0,21,0,MODE_EMA,PRICE_CLOSE,1); 

if(
Open[1] > Ma && Close[1] > Ma)
{ 

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point ,Ask+TakeProfit*Point,0,Magic,0,Green); 
 
Link to post
Share on other sites
Ugar68
2 часа назад, sviter сказал:
Здраствуйте! Использую стратегию торговли по тренду... вот допустим я использую Moving Average с периодом 21... и если свеча закрылась выше или ниже линии, то открывается ордер.... Подскажите как ограничить открытие ордеров на каждой свече... Я хочу что бы если свеча была выше или ниже линии МА, то отрывалось только 2 ордера на первых свечах после пересечения и больше не открывалось на остальных.... ???
 
PHP код:
Ma=iMA(NULL,0,21,0,MODE_EMA,PRICE_CLOSE,1); 

if(
Open[1] > Ma && Close[1] > Ma)
{ 

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point ,Ask+TakeProfit*Point,0,Magic,0,Green); 
 

Если вкратце, надо посчитать количество открытых ордеров. Добавить условие открытия, если количе5ство открытых меньше 2, то открывать.

По простому, для тестера пойдёт,

Ma=iMA(NULL,0,21,0,MODE_EMA,PRICE_CLOSE,1); 

if(Open[1] > Ma && Close[1] > Ma && OrdersTotal()<2)
{ 
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point ,Ask+TakeProfit*Point,0,Magic,0,Green); 
}  

А по нормальному, надо в цикле перебрать ордера, отфильтровать по символу и маджику, потом посчитать.


Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку.
Чужие программы не переделываю.

Link to post
Share on other sites
sviter

Типа так?

for (int i=0; i<OrdersTotal(); i++)
 if(OrderSelect(i,SELECT_BY_POS))
  if(OrderSymbol()==Symbol() && OrdersTotal() < 2)
    {

Ma=iMA(NULL,0,21,0,MODE_EMA,PRICE_CLOSE,1); 

if(Open[1] > Ma && Close[1] > Ma)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point ,Ask+TakeProfit*Point,0,Magic,0,Green);

 

   }

Link to post
Share on other sites
Ugar68
16 часов назад, sviter сказал:

Типа так?

for (int i=0; i<OrdersTotal(); i++)
 if(OrderSelect(i,SELECT_BY_POS))
  if(OrderSymbol()==Symbol() && OrdersTotal() < 2)
    {

Ma=iMA(NULL,0,21,0,MODE_EMA,PRICE_CLOSE,1); 

if(Open[1] > Ma && Close[1] > Ma)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point ,Ask+TakeProfit*Point,0,Magic,0,Green);

 

   }

Нет. Не надо всё в кучу мешать. Есть риск запутаться. Что и произошло.

Сначала посчитать ордера, потом условия

//Счётчик ордеров
int Orders=0;
for(int i=0; i<OrdersTotal(); i++)
{	//Выбрать ордер
	ResetLastError();
    if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
    {
      Print("Ордер не выбран, ошибка ", _LastError);
      continue;
    }
    //Фильтровать по символу
    if(OrderSymbol()!=_Symbol)continue;
    //Считать ордера
    Orders++;
}
//А дальше уже условия
Ma=iMA(NULL,0,21,0,MODE_EMA,PRICE_CLOSE,1); 

if(Open[1] > Ma && Close[1] > Ma && Orders<2)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point ,Ask+TakeProfit*Point,0,Magic,0,Green);

}  

В Вашем примере нет фильтрации ордеров по маджику, наверное не нужна. По этому и в моём её нет.

Edited by Ugar68

Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку.
Чужие программы не переделываю.

Link to post
Share on other sites
torgf

Помогите. Хочу отметить область прямоугольником по условию. Максимальная цена за  N свечей минус цена закрытия первой свечи больше 500 и цена десятой свечи равна любой цене первой свечи.

При limit;=rates_total-prev_calculated; выходит за пределы array out of range 

При limit;=1000; строит не то что должен

Чего ему нужно?😳

double val;
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
 int N_=10;
   if(rates_total<N_) return(0);

   int limit;//=rates_total-prev_calculated;
limit=1000;
   for(int i=limit; i>=0; i--) 
     {
      double val;
      int val_index=iHighest(NULL,0,MODE_HIGH,i+N_,i+1);
      if(val_index!=-1) val=Close[i+val_index];
      else PrintFormat("Ошибка вызова iHighest. Код ошибки=%d",GetLastError());

      if(val-Close[i+1]>=500*Point && High[i+1]>Low[i+N_] && Low[i+1]<=Low[i+N_])
        {
         ObjectCreate("bar0"+Time[i+1],OBJ_RECTANGLE,0,0,0,0,0);
         ObjectSet("bar0"+Time[i+1],OBJPROP_STYLE,STYLE_SOLID);
         ObjectSet("bar0"+Time[i+1],OBJPROP_COLOR,DarkBlue);
         ObjectSet("bar0"+Time[i+1],OBJPROP_BACK,true);
         ObjectSet("bar0"+Time[i+1],OBJPROP_TIME1,iTime(NULL,0,i+N_));
         ObjectSet("bar0"+Time[i+1],OBJPROP_PRICE1,val);//
         ObjectSet("bar0"+Time[i+1],OBJPROP_TIME2,Time[i+1]);
         ObjectSet("bar0"+Time[i+1],OBJPROP_PRICE2,iLow(NULL,0,i+N_));
        }
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }

 

Edited by torgf
Link to post
Share on other sites
MrLexS

 

Скрытый текст


 


//+------------------------------------------------------------------+
//| Скрипт, выставляет 2 ордера по 2м валютам одновременно           |
//+------------------------------------------------------------------+

#property show_inputs
enum type 
{
   t1=0,    // BUY
   t2=1,    // SELL
};
//+------------------------------------------------------------------+
extern double  LossOpen        = 100;      //открывать ордера при получении убытка
extern bool    AllSymbol       = true;     //учитывать все инструменты или только тот, на котором стоит советник
extern string  Comment        = "777";
extern string  SYMBOL1        = "EURUSD";  //первый символ
extern string  SYMBOL2        = "GBPUSD";  //второй символ
extern double  LOT1           = 0.01;      //лот первого инструмента
extern double  LOT2           = 0.01;      //лот второго инструмента
input type     TYPE1          = 0;         //тип ордера первого инструмента
input type     TYPE2          = 1;         //тип ордера второго инструмента
extern int     stoploss       = 0,         //уровень выставления SL, если 0, то SL не выставляется
               takeprofit     = 0;         //уровень выставления TP, если 0, то TP не выставляется
extern int     Slippage       = 30;        //проскальзывание 
extern int     Magic          = 777;
extern bool    MagicAll       = false;     //если true - закрывать все
//+------------------------------------------------------------------+
int start()
{
   double Profit;
   int OT;
   for (int i=OrdersTotal()-1; i>=0; i--)
   {                                              
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {

         if ((OrderMagicNumber() == Magic || MagicAll))
         {
            OT = OrderType();
            if (OT==OP_BUY)
            {
               Profit+=OrderProfit();
            }
            if (OT==OP_SELL)
            {
               Profit+=OrderProfit();
            }
         }
      }
      }
      if (Profit<=-LossOpen)
      {
       Alert("Достигнут уровень заданного убытка "+DoubleToStr(Profit,2));
       OpenOrderON(); 
      }
    return(0);
}

//--------------------------------------------------------------------
int OpenOrderON()
{ 
   int    Digit=(int)MarketInfo(SYMBOL1,MODE_DIGITS);
   double Poin=MarketInfo(SYMBOL1,MODE_POINT);
   double ASK=NormalizeDouble(MarketInfo(SYMBOL1,MODE_ASK),Digit);
   double BID=NormalizeDouble(MarketInfo(SYMBOL1,MODE_BID),Digit);
   double SL,TP;

      if (TYPE1 == OP_BUY)  
      {
         if (stoploss!=0)   SL  = NormalizeDouble(BID - stoploss*Poin,Digit); else SL=0;     
         if (takeprofit!=0) TP  = NormalizeDouble(ASK + takeprofit*Poin,Digit); else TP=0;
         if (OrderSend(SYMBOL1,OP_BUY,LOT1,ASK,Slippage,SL,TP,Comment,Magic,0,Blue)!=-1) 
            Alert("Ордер BUY  лот ",LOT1," ", SYMBOL1);
         else Alert(SYMBOL1," send order BAY error ",GetLastError(),"  ",MarketInfo(SYMBOL1,MODE_ASK),"  ",LOT1);
      }
      if (TYPE1 == OP_SELL)  
      {
         if (stoploss!=0)   SL  = NormalizeDouble(ASK + stoploss*Poin,Digit); else SL=0;     
         if (takeprofit!=0) TP  = NormalizeDouble(BID - takeprofit*Poin,Digit); else TP=0;
         if (OrderSend(SYMBOL1,OP_SELL,LOT1,BID,Slippage,SL,TP,Comment,Magic,0,Blue)!=-1) 
            Alert("Ордер SELL  лот ",LOT1," ", SYMBOL1);
         else Alert(SYMBOL1," send order SELL error ",GetLastError(),"  ",MarketInfo(SYMBOL1,MODE_ASK),"  ",LOT1);
      }

      Digit=(int)MarketInfo(SYMBOL2,MODE_DIGITS);
      Poin=MarketInfo(SYMBOL2,MODE_POINT);
      ASK=NormalizeDouble(MarketInfo(SYMBOL2,MODE_ASK),Digit);
      BID=NormalizeDouble(MarketInfo(SYMBOL2,MODE_BID),Digit);
      if (TYPE2 == OP_BUY)  
      {
         if (stoploss!=0)   SL  = NormalizeDouble(BID - stoploss*Poin,Digit); else SL=0;     
         if (takeprofit!=0) TP  = NormalizeDouble(ASK + takeprofit*Poin,Digit); else TP=0;
         if (OrderSend(SYMBOL2,OP_BUY,LOT2,ASK,Slippage,SL,TP,Comment,Magic,0,Blue)!=-1) 
            Alert("Ордер BUY  лот ",LOT2," ", SYMBOL2);
         else Alert(SYMBOL2," send order BAY error ",GetLastError(),"  ",MarketInfo(SYMBOL2,MODE_ASK),"  ",LOT2);
      }
      if (TYPE2 == OP_SELL)  
      {
         if (stoploss!=0)   SL  = NormalizeDouble(ASK + stoploss*Poin,Digit); else SL=0;     
         if (takeprofit!=0) TP  = NormalizeDouble(BID - takeprofit*Poin,Digit); else TP=0;
         if (OrderSend(SYMBOL2,OP_SELL,LOT2,BID,Slippage,SL,TP,Comment,Magic,0,Blue)!=-1) 
            Alert("Ордер SELL  лот ",LOT2," ", SYMBOL2);
         else Alert(SYMBOL2," send order SELL error ",GetLastError(),"  ",MarketInfo(SYMBOL2,MODE_ASK),"  ",LOT2);
      }
      return(0);
}

//--------------------------------------------------------------------

 

 


 

Задаю убыток, если он уже достигнут в момент установки скрипта на график то открываются ордера, а если еще не достигнут, то потом при достижении заданного убытка ордера не открываются. Что может не так?

Edited by AntFX
п. 13
Link to post
Share on other sites
Ugar68
09.11.2018 в 00:47, torgf сказал:

 

При limit;=rates_total-prev_calculated; выходит за пределы array out of range

 

Естественно. Когда prev_calculated ещё =0, то в limit количество баров. Длина массива = количеству баров. Последний индекс массива равен длина -1. Так как индексы считаются от 0.

Значит правильно будет начинать считать не с лимит, а с лимит -1.

int limit=rates_total-prev_calculated;
if(prev_calculated==0)limit--;
   for(int i=limit; i>=0; i--) 
  • Thanks 1

Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку.
Чужие программы не переделываю.

Link to post
Share on other sites
ZeleBoba

Основная функция, используемая для совершения торговых операций или установки отложенного ордера.

int  OrderSend(
   string   symbol,              // символ
   int      cmd                // торговая операция
   double   volume,              // количество лотов
   double   price,               // цена
   int      slippage,            // проскальзывание
   double   stoploss           // stop loss
   double   takeprofit,          // take profit
   string   comment=NULL       // комментарий
   int      magic=0            // идентификатор
   datetime expiration=0       // срок истечения ордера
   color    arrow_color=clrNONE  // цвет
   );

comment=NULL

[in]  Текст комментария ордера. Последняя часть комментария может быть изменена торговым сервером.

 

Кто знает подробности?

какая часть?

как изменена?

знаю что туда пишется закрытие по стопам (стоп-ауту, стоп-лоссу, тейк-профиту) в квадратных скобках, но не знаю - заменой или конкатенацией.

если был собственный коммент, то сохранится ли он, и если да,

то существует ли какой-нить разделитель между собственным комментом и комментом сервера?

 

Edited by ZeleBoba

Лучше маленький профит, чем большие рога.

Link to post
Share on other sites
Ugar68
2 часа назад, ZeleBoba сказал:

Основная функция, используемая для совершения торговых операций или установки отложенного ордера.

int  OrderSend(
   string   symbol,              // символ
   int      cmd                // торговая операция
   double   volume,              // количество лотов
   double   price,               // цена
   int      slippage,            // проскальзывание
   double   stoploss           // stop loss
   double   takeprofit,          // take profit
   string   comment=NULL       // комментарий
   int      magic=0            // идентификатор
   datetime expiration=0       // срок истечения ордера
   color    arrow_color=clrNONE  // цвет
   );

comment=NULL

[in]  Текст комментария ордера. Последняя часть комментария может быть изменена торговым сервером.

 

Кто знает подробности?

какая часть?

как изменена?

знаю что туда пишется закрытие по стопам (стоп-ауту, стоп-лоссу, тейк-профиту) в квадратных скобках, но не знаю - заменой или конкатенацией.

если был собственный коммент, то сохранится ли он, и если да,

то существует ли какой-нить разделитель между собственным комментом и комментом сервера?

 

Честно говоря уже не помню сколько максимальное количество символов в комментарии. Добавляется часть, добавлением, но если добавляемая часть не влазить в свободное количество символов то часть комментария ордера будет заменена добавляемым. Столько символов, сколько не влезло.


Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку.
Чужие программы не переделываю.

Link to post
Share on other sites
MG4
2 часа назад, ZeleBoba сказал:

Кто знает подробности?

какая часть?

как изменена?

стоп и тейк пишут в хвост

"комментарий" => "комментарий[tp]" или "комментарий[sl]"

 

при экспирации комментарий затирают пишут "expiration [2018.11.12 22:44]"

 

при частичном закрытии комментарий затирается у закрывшейся части становится "to #123456888" 

у оставшейся в рынке тоже затирается становится "from #123456777" 

 

 

 

 

  • Upvote 1

— Маржинкольщик наколи мне маржинкол.

Только качественная аналитика в ветке ПАММ-а MTSavg

 

Link to post
Share on other sites
AntFX
3 часа назад, ZeleBoba сказал:

Кто знает подробности?

какая часть?

как изменена?

На коммент желательно вообще не рассчитывать кроме той ситуации, когда Вы точно знаете на какое поведение сервера конкретного типа счета конкретного брокера Вам можно рассчитывать, потому что в принципе изменять могут весь коммент.


1

Link to post
Share on other sites
ZeleBoba

всем спасибо.


Лучше маленький профит, чем большие рога.

Link to post
Share on other sites
  • 2 weeks later...
sviter

Здравствуйте! Дайте пожалуйста готовый код трала с шагом и безубытком!!! тоесть что бы через количество шагов сработал безубыток и все!

Link to post
Share on other sites
sviter

Здраствуйте! делаю безубыточник! помогите, ато ругается на error 130, а иногда и срабатывает как положено!!! кароче когда как!!! что тут не так?

 

void Tralorder() 
  { 
   for(int i=OrdersTotal()-1; i>=0; i--) 
     { 
      if(OrderSelect(i,SELECT_BY_POS)==true) 
        { 
               if(OrderType()==OP_BUY) 
                 { 
                     if(Bid>NormalizeDouble(OrderOpenPrice()+shagtrala*Point,Digits) && OrderStopLoss()<NormalizeDouble(OrderOpenPrice()+lTrailingDistance*Point,Digits)) 
                      
                           if(OrderModify(OrderTicket(),OrderOpenPrice(), OrderOpenPrice() + (lTrailingDistance * _Point),0,0,clrGreen)==false)
                              Print(GetLastError()); 
                 } 
               if(OrderType()==OP_SELL) 
                 { 
                     if(Bid<NormalizeDouble(OrderOpenPrice()-shagtrala*Point,Digits) && OrderStopLoss()>NormalizeDouble(OrderOpenPrice()-lTrailingDistance*Point,Digits)) 
                      
                           if(OrderModify(OrderTicket(),OrderOpenPrice(), OrderOpenPrice() - (lTrailingDistance * _Point),0,0,clrRed)==false) 
                              Print(GetLastError()); 
                 } 
        } 
     } 
  }  

 

Link to post
Share on other sites
Ugar68

1. Нормировать обязательно нужно при отправке приказа. А вот при выяснении надобности модификации, нормировать не обязательно, там можно прибавить допуски в пол пункта, для верности.

2. 130 может быть при слишком близких стопах.


Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку.
Чужие программы не переделываю.

Link to post
Share on other sites
torgf
11.11.2018 в 21:12, Ugar68 сказал:

 

Спасибо.

Link to post
Share on other sites
torgf

Подскажите как действовать. Хочу заполнить буфер на первом баре, если бар в любое время был равен цене открытия любого бара, при условии что 2 или более баров были однонаправлены при росте а так же при снижении. Например три бара однонаправлены вверх и два однонаправлены вниз, один вверх и пять вниз. Общее количество не имеет значения. 

bar.JPG

bar1..JPG

Link to post
Share on other sites
AntFX
4 минуты назад, torgf сказал:

Подскажите как действовать. Хочу заполнить буфер на первом баре, если бар в любое время был равен цене открытия любого бара, при условии что 2 или более баров были однонаправлены при росте а так же при снижении.

Не слишком тривиально и требует уточнения условий имхо. Старайтесь писать условия по пунктам, в каждом пункте простейшее отношение одной величины к другой, и так до полного описания всех требуемых действий...

  • Upvote 1

1

Link to post
Share on other sites
torgf

AntFX, поняла, опишу условие для первой стрелки на первом снимке.

если любая цена первого бара равна цене открытия седьмого бара и 3 бара подряд бычьи за ними  4 бара подряд медвежьи. (образование из 7 баров)

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

Обобщу: минимум 2 бара подряд одного цвета, цена первого бара равна цене открытия самого дальнего из серии баров одного цвета.

 

Скриншот 04-12-2018 065940.jpg

Edited by torgf
Link to post
Share on other sites
  • 2 weeks later...
sviter

Добрый вечер! Подскажите как лучше реализовать следующую идею....

Брать последние фракталы и когда цена их пробивает, то открывать ордера...
 
Беру фракталы стандартными кодами от kimiva, а вот как правильно сравнивать не понятно, то ли сравнивать по цене, то ли по барам???
Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    No registered users viewing this page.


×
×
  • Create New...