nurfirdaus
Новичок форума
PHP:int cou=0; int bar=0; for(int i=0;i<Bars-20;i++) { if(crossed) {bar=i;cou++;} if(cou>=2) break; }
я не могу понять, объясните.lease:
PHP:int cou=0; int bar=0; for(int i=0;i<Bars-20;i++) { if(crossed) {bar=i;cou++;} if(cou>=2) break; }
Если нужен предпоследний сигнал то циклом от 0 бара перебираем дальше. Последний сигнал пропускаем. Следующий запиминаем и прекращаем цикл.я не могу понять, объясните.lease:
Если нужен предпоследний сигнал то циклом от 0 бара перебираем дальше. Последний сигнал пропускаем. Следующий запиминаем и прекращаем цикл.
Лучше картинку давай с примером.спасибо за объяснение, но как я могу назвать последний сигнал сигналом?
Ну тогда просто macd перекбирай от 0 бара и когда он пересечёт в цыкле 0.11 уровень останвливай цикл.Красная вертикальная линия указана MACD выше уровня 0,011, а черная линия - сигналом.
поэтому мне нужно запомнить последний перекрестный уровень, чтобы перезвонить.
PHP:if(LastCross && macdNow > signNow && macdPre2 < signPre2) { Signal = 1; // buy }
void f0_17(int Ai_0, int Ai_4, double A_price_8) {
int Li_16;
double order_stoploss_20;
double price_28;
if (Ai_4 != 0) {
for (int pos_36 = OrdersTotal() - 1; pos_36 >= 0; pos_36--) {
if (OrderSelect(pos_36, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol() != Symbol() || OrderMagicNumber() != Gi_352) continue;
if (OrderSymbol() == Symbol() || OrderMagicNumber() == Gi_352) {
if (OrderType() == OP_BUY) {
Li_16 = NormalizeDouble((Bid - A_price_8) / Point, 0);
if (Li_16 < Ai_0) continue;
order_stoploss_20 = OrderStopLoss();
price_28 = Bid - Ai_4 * Point;
if (order_stoploss_20 == 0.0 || (order_stoploss_20 != 0.0 && price_28 > order_stoploss_20)) OrderModify(OrderTicket(), A_price_8, price_28, OrderTakeProfit(), 0, Aqua);
}
if (OrderType() == OP_SELL) {
Li_16 = NormalizeDouble((A_price_8 - Ask) / Point, 0);
if (Li_16 < Ai_0) continue;
order_stoploss_20 = OrderStopLoss();
price_28 = Ask + Ai_4 * Point;
if (order_stoploss_20 == 0.0 || (order_stoploss_20 != 0.0 && price_28 < order_stoploss_20)) OrderModify(OrderTicket(), A_price_8, price_28, OrderTakeProfit(), 0, Red);
}
}
Sleep(1000);
}
}
}
}
return value of 'OrderModify' should be checked plz Help
Код:void f0_17(int Ai_0, int Ai_4, double A_price_8) { int Li_16; double order_stoploss_20; double price_28; bool OrderOperationResult = false; if (Ai_4 != 0) { for (int pos_36 = OrdersTotal() - 1; pos_36 >= 0; pos_36--) { if (OrderSelect(pos_36, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() != Symbol() || OrderMagicNumber() != Gi_352) continue; if (OrderSymbol() == Symbol() || OrderMagicNumber() == Gi_352) { if (OrderType() == OP_BUY) { Li_16 = NormalizeDouble((Bid - A_price_8) / Point, 0); if (Li_16 < Ai_0) continue; order_stoploss_20 = OrderStopLoss(); price_28 = Bid - Ai_4 * Point; if (order_stoploss_20 == 0.0 || (order_stoploss_20 != 0.0 && price_28 > order_stoploss_20)) OrderOperationResult = OrderModify(OrderTicket(), A_price_8, price_28, OrderTakeProfit(), 0, Aqua); } if (OrderType() == OP_SELL) { Li_16 = NormalizeDouble((A_price_8 - Ask) / Point, 0); if (Li_16 < Ai_0) continue; order_stoploss_20 = OrderStopLoss(); price_28 = Ask + Ai_4 * Point; if (order_stoploss_20 == 0.0 || (order_stoploss_20 != 0.0 && price_28 < order_stoploss_20)) OrderOperationResult = OrderModify(OrderTicket(), A_price_8, price_28, OrderTakeProfit(), 0, Red); } } Sleep(1000); } } } }
Здравствуйте! Я сейчас покажусь очень глупым если я задам этот вопрос... но я его задам(что то меня переклинило вот я и туплю). Так вот: скажите пожалуйста как можно сделать так что б сов видел сигнал индюка определённое кол-во баров после самого сигнала? Заранее благодарен...))))
extern int signal_bars = 4;
extern int Kperiod = 14;
extern int Dperiod = 5;
extern int slowing = 5;
extern ENUM_MA_METHOD method = MODE_SMA;
extern ENUM_STO_PRICE price = STO_LOWHIGH;
int signal = -1;
datetime time_bar;
void OnTick() {
if (time_bar!=Time[0]) {
time_bar=Time[0];
signal = -1; // обнулим прошлый сигнал
for(int i=1;i<=signal_bars;i++) {
double sto_now = iStochastic(_Symbol,0,Kperiod,Dperiod,slowing,method,price, MODE_MAIN, i);
double sto_last = iStochastic(_Symbol,0,Kperiod,Dperiod,slowing,method,price, MODE_MAIN, i+1);
if(sto_now>50 && sto_last<=50) { signal = 0; break; } // нашли пересечение вверх
if(sto_now<50 && sto_last>=50) { signal = 1; break; } // нашли пересечение вниз
}
}
}
double OpenPriceSell()
{
double MA30 = iMA(NULL,0,period,0,MODE_EMA,PRICE_OPEN,0);
double MA90 = iMA(NULL,0,period,0,MODE_EMA,PRICE_OPEN,0);
double MA31 = iMA(NULL,0,period,0,MODE_EMA,PRICE_OPEN,1);
double MA91 = iMA(NULL,0,period,0,MODE_EMA,PRICE_OPEN,1);
double lastsell=0;
int i, ticket=0;
for( i=OrdersHistoryTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS, MODE_HISTORY)==true)
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==321)
{
if(OrderType() == OP_SELL)
{
if(OrderTicket()> ticket)
{
ticket=OrderTicket();
lastsell=OrderOpenPrice();
}
if (MA30<MA90&&MA31>MA91)lastsell=-1;
}
}
}
}
return(lastsell);
}
Вопрос не глупый. Записывайте сигнал в переменную. На открытии каждой новой свечи делайте поиск сигнала по последним N свечам.
на примере стохастика и уровня 50:
А вот ещё один вопрос: скажите пожалуйста как выследить в коде сова закрытие ордера по Стоплоссу/Тэйкпрофиту?
StringFined(OrderComment(),"[sl]")!=-1
Стоит сначала поинтересоваться у брокера, меняют ли они комментарии ордера при закрытии по стоп лосс или тейк профит. Не все это делают.PHP:StringFined(OrderComment(),"[sl]")!=-1
Не видел таких.Стоит сначала поинтересоваться у брокера, меняют ли они комментарии ордера при закрытии по стоп лосс или тейк профит. Не все это делают.
Так же о всех случаях при которых меняют комментарий и что пишут.
Например может быть закрытие по стоп лосс с комментарием [GapSL], или [SLGap], или ... вариантов много.
if(OrderType()==OP_BUY && OrderClosePrice()<=OrderStopLoss())
if(OrderType()==OP_SELL && OrderClosePrice()>=OrderStopLoss() && OrderStopLoss()!=0)
То же вариант. Но он то же не везде и всегда будет работать. К сожалению в MQL4 нет универсального и надёжного способа определения причины закрытия. Именно по этому многие брокеры пишут её в комментарии. Вариант с комментарием то же будет работать в большинства случаев и у большинства брокеров.Не видел таких.
PHP:if(OrderType()==OP_BUY && OrderClosePrice()<=OrderStopLoss())
PHP:if(OrderType()==OP_SELL && OrderClosePrice()>=OrderStopLoss() && OrderStopLoss()!=0)