[Архив!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 2. - страница 291

 
Спасибо всем! разобрался.. я сначало сделал без IndicatorBuffers(2); и не работало..
 

Помогите пожалуста есть советник на пробой фракталов .Я подобрал хорошие параметри токо нужно добавить чтоб он ставил лот по мартингейлу (в 2 больше при проиграше).Или дайте силку на советник которий будет токо удваить лот без дрейдинга чтоб 2 сразу запустить(если есть такое) .Вот советник:

//+------------------------------------------------------------------+

//| Fractals.mq4 |

//| TO |

//| http://www.forex-tradexperts-to.narod.ru |

//+------------------------------------------------------------------+

#property copyright "TO"

#property link "http://www.forex-tradexperts-to.narod.ru"





#include <WinUser32.mqh>


extern int TP_Fract_3=300;

extern int SL_Fract_3=200;

extern int TP_Fract_11=500;

extern int SL_Fract_11=300;

extern bool buy_Fract_3=true;

extern bool sell_Fract_3=true;

extern bool buy_Fract_11=true;

extern bool sell_Fract_11=true;

extern bool podtvergdenie=false;

extern int tofract=10;

extern double lots=0.1;

extern int ID = 5452;


string com;

double spread;


int init()

{

com=DoubleToStr(ID,0);

spread=MarketInfo(Symbol(),MODE_SPREAD)*Point;

return(0);

}


int deinit()

{

return(0);

}


datetime t1,t2=0;


bool order(double price,int type,string c,int m)

{

int i;

for(i=OrdersTotal()-1;i>=0;i--)

{

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

if(OrderComment()==c && OrderMagicNumber()==m && OrderOpenPrice()==price && OrderType()==type)return(false);

if(i==0)return(true);

}

if(OrdersTotal()==0)return(true);

}


int start()

{

int i,ret;

t1=Time[0];

if(t1!=t2)

{

int fract_buy_3=iHighest(Symbol(), Period(),MODE_HIGH,5,1);

int fract_sell_3=iLowest(Symbol(), Period(),MODE_LOW,5,1);

int fract_buy_11=iHighest(Symbol(), Period(),MODE_HIGH,21,1);

int fract_sell_11=iLowest(Symbol(), Period(),MODE_LOW,21,1);

if( fract_buy_3==3 && buy_Fract_3==true)

{

if(OrdersTotal()==0)if(order(High[fract_buy_3]+tofract*Point+spread,4,com,5))OrderSend(Symbol(),OP_BUYSTOP,lots,High[fract_buy_3]+tofract*Point+spread,10,High[fract_buy_3]+tofract*Point-SL_Fract_3*Point,High[fract_buy_3]+tofract*Point+spread+TP_Fract_3*Point,com,5);

for(i=OrdersTotal()-1;i>=0;i--)

{

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

if(OrderComment()==com && OrderMagicNumber()==5 && OrderType()==4)

{

OrderModify(OrderTicket(),High[fract_buy_3]+tofract*Point+spread, High[fract_buy_3]+tofract*Point-SL_Fract_3*Point, High[fract_buy_3]+tofract*Point+spread+TP_Fract_3*Point,0,Blue);

break;

}

if(i==0)if(order(High[fract_buy_3]+tofract*Point+spread,4,com,5))

{

if(podtvergdenie)

{

ret=MessageBox("Сигнал на "+Symbol()+" H1 BUYSTOP "+"\nУстановить ордер?", "Signal", MB_YESNO|MB_ICONQUESTION);

if(ret==IDYES)OrderSend(Symbol(),OP_BUYSTOP,lots,High[fract_buy_3]+tofract*Point+spread,10,High[fract_buy_3]+tofract*Point-SL_Fract_3*Point,High[fract_buy_3]+tofract*Point+spread+TP_Fract_3*Point,com,5);

}

if(!podtvergdenie)OrderSend(Symbol(),OP_BUYSTOP,lots,High[fract_buy_3]+tofract*Point+spread,10,High[fract_buy_3]+tofract*Point-SL_Fract_3*Point,High[fract_buy_3]+tofract*Point+spread+TP_Fract_3*Point,com,5);

}

}

}

if( fract_sell_3==3 && sell_Fract_3==true)

{

if(OrdersTotal()==0)if(order(Low[fract_sell_3]-tofract*Point,5,com,5))OrderSend(Symbol(),OP_SELLSTOP,lots,Low[fract_sell_3]-tofract*Point,10,Low[fract_sell_3]+spread-tofract*Point+SL_Fract_3*Point,Low[fract_sell_3]-tofract*Point-TP_Fract_3*Point,com,5);

for(i=OrdersTotal()-1;i>=0;i--)

{

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

if(OrderComment()==com && OrderMagicNumber()==5 && OrderType()==5)

{

OrderModify(OrderTicket(),Low[fract_sell_3]-tofract*Point,Low[fract_sell_3]+spread-tofract*Point+SL_Fract_3*Point,Low[fract_sell_3]-tofract*Point-TP_Fract_3*Point,0,Red);

break;

}

if(i==0)if(order(Low[fract_sell_3]-tofract*Point,5,com,5))

{

if(podtvergdenie)

{

ret=MessageBox("Сигнал на "+Symbol()+" H1 SELLSTOP "+"\nУстановить ордер?", "Signal", MB_YESNO|MB_ICONQUESTION);

if(ret==IDYES)OrderSend(Symbol(),OP_SELLSTOP,lots,Low[fract_sell_3]-tofract*Point,10,Low[fract_sell_3]+spread-tofract*Point+SL_Fract_3*Point,Low[fract_sell_3]-tofract*Point-TP_Fract_3*Point,com,5);

}

if(!podtvergdenie)OrderSend(Symbol(),OP_SELLSTOP,lots,Low[fract_sell_3]-tofract*Point,10,Low[fract_sell_3]+spread-tofract*Point+SL_Fract_3*Point,Low[fract_sell_3]-tofract*Point-TP_Fract_3*Point,com,5);

}

}

}

if( fract_buy_11==11 && buy_Fract_11==true)

{

if(OrdersTotal()==0)if(order(High[fract_buy_11]+tofract*Point+spread,4,com,21))OrderSend(Symbol(),OP_BUYSTOP,lots,High[fract_buy_11]+tofract*Point+spread,10,High[fract_buy_11]+tofract*Point-SL_Fract_11*Point,High[fract_buy_11]+tofract*Point+spread+TP_Fract_11*Point,com,21);

for(i=OrdersTotal()-1;i>=0;i--)

{

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

if(OrderComment()==com && OrderMagicNumber()==21 && OrderType()==4)

{

OrderModify(OrderTicket(),High[fract_buy_11]+tofract*Point+spread, High[fract_buy_11]+tofract*Point-SL_Fract_11*Point, High[fract_buy_11]+tofract*Point+spread+TP_Fract_11*Point,0,Blue);

break;

}

if(i==0)if(order(High[fract_buy_11]+tofract*Point+spread,4,com,21))

{

if(podtvergdenie)

{

ret=MessageBox("Сигнал на "+Symbol()+" H4 BUYSTOP "+"\nУстановить ордер?", "Signal", MB_YESNO|MB_ICONQUESTION);

if(ret==IDYES)OrderSend(Symbol(),OP_BUYSTOP,lots,High[fract_buy_11]+tofract*Point+spread,10,High[fract_buy_11]+tofract*Point-SL_Fract_11*Point,High[fract_buy_11]+tofract*Point+spread+TP_Fract_11*Point,com,21);

}

if(!podtvergdenie)OrderSend(Symbol(),OP_BUYSTOP,lots,High[fract_buy_11]+tofract*Point+spread,10,High[fract_buy_11]+tofract*Point-SL_Fract_11*Point,High[fract_buy_11]+tofract*Point+spread+TP_Fract_11*Point,com,21);

}

}

}

if( fract_sell_11==11 && sell_Fract_11==true)

{

if(OrdersTotal()==0)if(order(Low[fract_sell_11]-tofract*Point,5,com,21))OrderSend(Symbol(),OP_SELLSTOP,lots,Low[fract_sell_11]-tofract*Point,10,Low[fract_sell_11]+spread-tofract*Point+SL_Fract_11*Point,Low[fract_sell_11]-tofract*Point-TP_Fract_11*Point,com,21);

for(i=OrdersTotal()-1;i>=0;i--)

{

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

if(OrderComment()==com && OrderMagicNumber()==21 && OrderType()==5)

{

OrderModify(OrderTicket(),Low[fract_sell_11]-tofract*Point,Low[fract_sell_11]+spread-tofract*Point+SL_Fract_11*Point,Low[fract_sell_11]-tofract*Point-TP_Fract_11*Point,0,Red);

break;

}

if(i==0)if(order(Low[fract_sell_11]-tofract*Point,5,com,21))

{

if(podtvergdenie)

{

ret=MessageBox("Сигнал на "+Symbol()+" H4 BUYSTOP "+"\nУстановить ордер?", "Signal", MB_YESNO|MB_ICONQUESTION);

if(ret==IDYES)OrderSend(Symbol(),OP_SELLSTOP,lots,Low[fract_sell_11]-tofract*Point,10,Low[fract_sell_11]+spread-tofract*Point+SL_Fract_11*Point,Low[fract_sell_11]-tofract*Point-TP_Fract_11*Point,com,21);

}

if(!podtvergdenie)OrderSend(Symbol(),OP_SELLSTOP,lots,Low[fract_sell_11]-tofract*Point,10,Low[fract_sell_11]+spread-tofract*Point+SL_Fract_11*Point,Low[fract_sell_11]-tofract*Point-TP_Fract_11*Point,com,21);

}

}

}

t2=Time[0];

}

return(0);

}

Плохо пишу по русски простите!

 
AppaRat:

Плохо пишу по русски простите!

вы еще и вставлять код не умеете. читать эту простынь нет желания.
 

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

тобиш при 2 условиях

bool BuystopLotA=isCloseLastPosByStop(NULL,OP_BUY,MagBuy,LotA);
и
bool BuyTakeLotB=isCloseLastPosByTake(NULL,OP_BUY,MagBuy,LotB);

он возращяет одновремено по обоим значениям True,

как зделать чтоб он брал только последний закрытый ордер а не последний по условию,

вот сам код я в него добавил проверку по лотам для своего удобства

//+----------------------------------------------------------------------------+
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.05.2008                                                     |
//|  Описание : Возвращает флаг закрытия последней позиции по стопу.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool isCloseLastPosByStop(string sy="", int op=-1, int mn=-1, int ll=-1) {
  datetime t;
  double   ocp, osl;
  int      dg, i, j=-1, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
             if (ll<0 || OrderLots()==ll) {
              if (t<OrderCloseTime()) {
                t=OrderCloseTime();
                j=i;
              }
            }
          }
        }
      }
    }
  }
} 
  if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
    dg=MarketInfo(sy, MODE_DIGITS);
    if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
    ocp=NormalizeDouble(OrderClosePrice(), dg);
    osl=NormalizeDouble(OrderStopLoss(), dg);
    if (ocp==osl) return(True);
  }
  return(False);
}



//+----------------------------------------------------------------------------+
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.05.2008                                                     |
//|  Описание : Возвращает флаг закрытия последней позиции по тейку.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool isCloseLastPosByTake(string sy="", int op=-1, int mn=-1, int ll=-1) {
  datetime t;
  double   ocp, otp;
  int      dg, i, j=-1, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
             if (ll<0 || OrderLots()==ll) {
              if (t<OrderCloseTime()) {
                t=OrderCloseTime();
                j=i;
              }
            }
          }
        }
      }
    }
  }
} 
  if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
    dg=MarketInfo(sy, MODE_DIGITS);
    if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
    ocp=NormalizeDouble(OrderClosePrice(), dg);
    otp=NormalizeDouble(OrderTakeProfit(), dg);
    if (ocp==otp) return(True);
  }
  return(False);
}
 
FoxUA:

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

тобиш при 2 условиях

он возращяет одновремено по обоим значениям True,

как зделать чтоб он брал только последний закрытый ордер а не последний по условию,

вот сам код я в него добавил проверку по лотам для своего удобства


Проверку лотов в ф-цию сами добавили? Вот теперь они и проверяют последние закрытые позиции с переданным лотом, причём лот наверняка всегда нулю равен, либо целое число. Переменная ll должна иметь тип double. А вообще зачем тут проверка на лот?

Вы напишите чего добиться хотите, а вам подскажут :)

 

Да, и почему лот - int? Лот всегда был double.

Можно так, когда у Вас останется один ордер, определите какой остался и проведите поиск для противоположного.

 
FoxUA:

Скажите кто может помоч с климовским блоком...

Не надо дублировать сообщения в разных ветках, это дурной тон.
 
artmedia70:

Проверку лотов в ф-цию сами добавили? Вот теперь они и проверяют последние закрытые позиции с переданным лотом, причём лот наверняка всегда нулю равен, либо целое число. Переменная ll должна иметь тип double. А вообще зачем тут проверка на лот?

Вы напишите чего добиться хотите, а вам подскажут :)

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

замена double на int, изначально было double но петем поиска почему поменял и видать просто забыл вернуть, да и без проверки по лоту если использывать функцию отдельно то результат не меняется, так что может я не правельно включил проверку полотам сюда, одним словам помогите разобратся в чем баг

вот так запросы выглядять

вот так работает без проблем 
bool BuystopLotA=isCloseLastPosByStop(NULL,OP_BUY,MagBuy,LotA);
bool BuyTakeLotA=isCloseLastPosByTake(NULL,OP_BUY,MagBuy,LotA);
bool SellstopLotC=isCloseLastPosByStop(NULL,OP_SELL,MagBuy,LotC);
bool SellTakeLotC=isCloseLastPosByTake(NULL,OP_SELL,MagBuy,LotC);

при добовлении вот этих запросов
bool BuystopLotB=isCloseLastPosByStop(NULL,OP_BUY,MagBuy,LotB);
bool BuyTakeLotB=isCloseLastPosByTake(NULL,OP_BUY,MagBuy,LotB);

начинает возвращять True не по одному а по двум запросам 
BuyTakeLotB и BuystopLotA



 
Roger:

Да, и почему лот - int? Лот всегда был double.

Можно так, когда у Вас останется один ордер, определите какой остался и проведите поиск для противоположного.


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

извеняюсь больше постараю не забывать удалять одинаковые посты из разных тем,
Причина обращения: