Спрашивайте! - страница 98

 

Помогите еще раз

Привет всем,

Я работаю над советником уже, кажется, целую вечность. Спасибо всем людям в этой теме за помощь, которую они мне оказали.

Сейчас я снова в тупике и ищу еще помощи. Как мы все знаем, большинство сигналов типа пересечения от MA до Stoch не очень хорошо работают, потому что много раз они пересекаются в конце движения.

Я пытаюсь использовать Stochastic RSI, когда он пересекает линию 50, но только на следующем баре, когда цена прошла максимум или минимум на определенное количество пунктов (MinPips). Моя основная проблема заключается в том, что когда я отслеживаю пересечение, если цена достигает MinPips только на последующих барах после пересечения, но пересечение остается в том же направлении.

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

Точка #1 находится в точке пересечения на продажу, но поскольку цена никогда не проходит минимум этого бара, сделка не совершается (на самом деле, я бы хотел, чтобы все предыдущие сделки оставались активными).

Точка #2 находится на пересечении покупок, но цена проходит максимум бара только на 4-ом баре после пересечения, и сделка должна быть взята в это время. Все предыдущие ордера на продажу должны быть закрыты в это время.

Я надеюсь, что это работает, так как это первый раз, когда я прикрепляю картинку. Заранее извиняюсь, если что-то напутал.

Putz

Файлы:
 

Дополнительная информация

Ниже приведена моя программа, где CurrDir - это текущее направление, а PrevDir - предыдущее направление, так что если они не равны, то произошло пересечение.

Проблема в том, что если он не пересекается на текущем баре, то CurrDir и PrevDir становятся равными, и он никогда не проходит мимо этого бара, чтобы увидеть, достиг ли он ValHigh или ValLow.

Любая помощь будет оценена по достоинству.

Putz

if(CurrDir != PrevDir)

{

if(CurrDir == 1)

{

ValHigh = iHigh(Symbol(),Timeframe2,1) + MinPips*Point;

if(Bid >= ValHigh)

{

return(1); //up

}

return (2);

}

if(CurrDir == 2)

{

ValLow = iLow(Symbol(),Timeframe2,1) - MinPips*Point;

if(Ask <= ValLow)

{

return(2);//down

}

return (1);

}

 

Разобрался... кажется

Кажется, я наконец-то разобрался со своей проблемой. Сейчас почти 2:30 ночи, и я устал, так что я проверю это завтра...

Putz

 

Есть ли способ изменить формат данных экспортного файла MT4?

Я ищу ASCII.csv, но мне нужно, чтобы данные были в следующем формате;

1) отдельные столбцы (нужны только: время, максимум, минимум и закрытие)

2) только для последних 1000 баров

3) обратный порядок (последний сверху)

4) сохраняет его в папке, которая уже есть на моем рабочем столе (может быть функция просмотра для выбора папки?).

Заранее спасибо всем, кто сможет мне помочь.

 

Добавление и удаление индикаторов

Можно ли написать в советнике код для добавления или удаления индикатора в торговой платформе?????

Дэйв

 

У меня большая проблема с управлением ордерами.....

Мой простой советник входит в X:59...... но у меня несколько входов на одном и том же кресте. Мой вопрос: Можно ли проверить время входа ордеров и сравнить с новым ордером?

Я хочу, чтобы вход в X:59 был только с 1 ордером на кросс.....

Кто-нибудь может мне помочь?

 
metastock:
У меня большая проблема с управлением ордерами....

Мой простой советник входит в X:59......, но у меня несколько входов на одном и том же кресте. Мой вопрос: Можно ли проверить время входа ордеров и сравнить с новым ордером?

Мне нужен вход в X:59 только с 1 ордером на кросс.....

Кто-нибудь может мне помочь?

Это мое решение, я надеюсь, что это может помочь кому-нибудь......

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

//| Сигнал Begin(Entry)|

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

if (Buy1_1 58 && check_buy==0) Order = SIGNAL_BUY;

if (Sell1_1 > Sell1_2 && Minute()>58 && check_sell==0) Order = SIGNAL_SELL;

if (Minute()==00) {check_buy=0;}

if (Minute()==00) {check_sell=0;}

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

//| Конец сигнала |

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

//Покупка

if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

//if(!IsTrade) {

//Проверка свободной маржи

if (AccountFreeMargin() < (1000 * Lots)) {

Print("У нас нет денег. Свободная маржа = ", AccountFreeMargin());

return(0);

}

if (StopLossMode) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;

if (TakeProfitMode) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;

check_buy = 1;

Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy %W(#" + Magic_Number + ")", Magic_Number, 0, DodgerBlue);

if (Ticket > 0) {

if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {

Print("Открыт ордер BUY : ", OrderOpenPrice());

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");

} else {

Print("Ошибка открытия ордера BUY : ", GetLastError());

}

}

if (EachTickMode) TickCheck = True;

if (!EachTickMode) BarCount = Bars;

return(0);

// }

}

//Продажа

if (Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

//if(!IsTrade) {

//Проверка свободной маржи

if (AccountFreeMargin() < (1000 * Lots)) {

Print("У нас нет денег. Свободная маржа = ", AccountFreeMargin());

return(0);

}

if (StopLossMode) StopLossLevel = Bid + StopLoss * Point; else StopLossLevel = 0.0;

if (TakeProfitMode) TakeProfitLevel = Bid - TakeProfit * Point; else TakeProfitLevel = 0.0;

check_sell = 1;

Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell %W(#" + Magic_Number + ")", Magic_Number, 0, DeepPink);

if (Ticket > 0) {

if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {

Print(" Открытордер SELL: ", OrderOpenPrice());

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell");

} else {

Print("Ошибка открытия ордера SELL : ", GetLastError());

}

}

if (EachTickMode) TickCheck = True;

if (!EachTickMode) BarCount = Bars;

return(0);

//}

}

if (!EachTickMode) BarCount = Bars;

return(0);

}

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

 

В Метасток

Я не могу сказать, что заставляет check_buy быть True.

Чтобы ограничиться одним открытым ордером, вы можете использовать, перед входом:

if (OrdersTotal()==0)

Big Be

 

Вопросы на знание кодирования

КОГДА вы хотите использовать переменную STATIC - какие проблемы она может решить?

КОГДА вы хотите поместить что-то в секцию INIT() - какие проблемы это решает?

Big Be

 

не уверен, что это уже спрашивали, но есть ли способ провести линию в текущее время +1 час до и после по определенной цене в советнике?