Jump to content
Programmer

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

Recommended Posts

AntFX
В 28.09.2018 в 05:58, AntFX сказал:

Кто-нибудь в курсе, как заставить перегруженные логические операции, типа operator==, правильно работать с указателями? То есть как сделать, чтобы следующий код

Если поизвращаться, то сделать это можно так =))

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

 


// Просто макросы для удобства
#define gpt GetPointer(this)
#define cp CheckPointer
#define good(ptr) cp(ptr)==POINTER_DYNAMIC
#define pf PrintFormat
#define r return
#define bts(var) (var?"true":"false")/* bool to string */
#define del(ptr) if(good(ptr)) delete ptr

 

 

 

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

 


class A;
// Используем структуру S в качстве обертки для класса А.
struct S{ S(A* par):a(par){} S(S &par):a(par.a){}
  S operator==(A* par){ S s(good(par)?par:a); if(good(a)) a.PrintEqual(par); else pf("This is the end..."); r(s); }
  S operator!=(A* par){ S s(a); del(par); r(s==par); }
  A* a;};

// Специальный метод класса (перегруженный оператор ~) возвращает обертку на себя, в которой перегружены все нужные операции
class A{ public:
    A(string par=NULL):str(par){ }
    S operator~(void){ S s(gpt); r(s); }
    void PrintEqual(A *a){ if(good(a)) pf("%s is %s: %s",str,a.str,bts(str==a.str)); else pf("The winter is nigh");  }
  private: string str;};

 

 

 

 

void OnStart(){
   A *a=new A("A");
   A *b=a;
   A *c=new A("C");
   A *d=c;
   
   ~a==b==c==d!=a!=c; }
Скрытый текст

nigh.jpg

И если подумать, так можно "на ходу" менять наборы операторов, что может быть удобно...

Edited by AntFX
  • Upvote 1

Share this post


Link to post
Share on other sites
sviter

Граждане! Может у кого есть готовый кусок ТРЭЙЛИНГА,  который следует за ценой???

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites
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

Пишу советники и индикаторы по вашим алгоритмам. Пишите на ugar68@bk.ru.
Чужие программы не переделываю.
Успешные трейдеры, вам сюда www.podari-zhizn.ru, или сюда predanie.ru

 

 

Share this post


Link to post
Share on other sites
torgf

Помогите.

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

Share this post


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

Помогите.

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

Лот = 0.12

Share this post


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

Лот = 0.12

Гениально!

Share this post


Link to post
Share on other sites
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); 
 

Share this post


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); 
}  

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


Пишу советники и индикаторы по вашим алгоритмам. Пишите на ugar68@bk.ru.
Чужие программы не переделываю.
Успешные трейдеры, вам сюда www.podari-zhizn.ru, или сюда predanie.ru

 

 

Share this post


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

 

   }

Share this post


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

Пишу советники и индикаторы по вашим алгоритмам. Пишите на ugar68@bk.ru.
Чужие программы не переделываю.
Успешные трейдеры, вам сюда www.podari-zhizn.ru, или сюда predanie.ru

 

 

Share this post


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

Share this post


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

Share this post


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

Пишу советники и индикаторы по вашим алгоритмам. Пишите на ugar68@bk.ru.
Чужие программы не переделываю.
Успешные трейдеры, вам сюда www.podari-zhizn.ru, или сюда predanie.ru

 

 

Share this post


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

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

Share this post


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]  Текст комментария ордера. Последняя часть комментария может быть изменена торговым сервером.

 

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

какая часть?

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

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

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

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

 

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


Пишу советники и индикаторы по вашим алгоритмам. Пишите на ugar68@bk.ru.
Чужие программы не переделываю.
Успешные трейдеры, вам сюда www.podari-zhizn.ru, или сюда predanie.ru

 

 

Share this post


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 Моя торговая стратегия. Капитал Управляющего 12'501 USD.

Век живи, век учись рвать шаблон.

Share this post


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

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

какая часть?

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

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

Share this post


Link to post
Share on other sites
ZeleBoba

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


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

Share this post


Link to post
Share on other sites
sviter

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

Share this post


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()); 
                 } 
        } 
     } 
  }  

 

Share this post


Link to post
Share on other sites
Ugar68

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

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


Пишу советники и индикаторы по вашим алгоритмам. Пишите на ugar68@bk.ru.
Чужие программы не переделываю.
Успешные трейдеры, вам сюда www.podari-zhizn.ru, или сюда predanie.ru

 

 

Share this post


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

 

Спасибо.

Share this post


Link to post
Share on other sites
torgf

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

bar.JPG

bar1..JPG

Share this post


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

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

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

  • Upvote 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

×