Firebird v63G - страница 30

 

Как вы можете видеть на графике USDCHF за последнюю неделю, Firebird очень хорошо работает на рынке, ограниченном диапазоном. Когда рынок становится трендовым, Firebird очень часто принимает неправильные решения. Поэтому решение может быть очень простым: мы должны выходить из рынка, как только он становится трендовым, и возвращаться, когда диапазонный рынок восстанавливается.

В Phoenix есть часть кода, которая следит за этими изменениями. Короче говоря, он берет максимумы за последние 24, 12, 6 и 2 часа и определяет, когда рынок становится трендовым и когда восстанавливается граница диапазона.

Файлы:
 

Отличная работа Хендрика, ваш мозговой штурм приносит свои плоды, я с нетерпением жду возможности протестировать Phoenix, когда вы его выпустите. Ваше здоровье, Goldensight

Hendrick:
Здесь вы можете увидеть разницу в поведении между Phoenix и Firebird для USDCHF, когда ситуация становится тяжелой:

Firebird разместил 3 покупки, все остановились.

Phoenix ждет подходящего момента, сделал 3 SELLS, которые все попали в TP.

Хорошо?
 
MarvinSk:
Уже гораздо ближе

Я добавил следующее:

if ((Safe1!=1)&&(DealTime==2)) {

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

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {

if (OrderSymbol()==Symbol()) {

if (OrderType()==OP_BUY) {

pBid=MarketInfo(OrderSymbol(), MODE_BID);

OrderClose(OrderTicket(), OrderLots(), pBid, slip, clCloseBuy);

}

if (OrderType()==OP_SELL) {

pAsk=MarketInfo(OrderSymbol(), MODE_ASK);

OrderClose(OrderTicket(), OrderLots(), pAsk, slip, clCloseSell);

}

}

}

}

}

В обратном тестировании я вижу, что он закрывает OpenTrades, но мне нужно добавить функцию поиска STOPLOSS, потому что он закрывает сделки, которые имеют ПОЛОЖИТЕЛЬНЫЕ прибыли, когда переменные Safe1 и DealTime совпадают.

Так что Stoploss должен быть 3-й ловушкой... Я перешлю это на следующей неделе, как только заработаю...

Опять же, это идея, что каждый должен иметь некоторый контроль над существующими открытыми сделками, когда рынок становится волатильным... Если сделка должна остановиться, я предпочитаю, чтобы она остановилась на полпути, а не на 100%. По крайней мере, когда рынок восстановится, вам не придется много наверстывать...

Спасибо

Привет, Марвин,

Гораздо более простым решением будет закрытие открытой сделки, как только сигнал изменится. Что вы думаете?

 
Hendrick:
Привет, Марвин, гораздо более простым решением будет закрытие открытой сделки, как только сигнал изменится. Что вы думаете?

Привет, Хендрик... Когда вы говорите сигнал, вы имеете в виду, когда значение Safe1 и Dealtime становятся истинными?

Если это так, то, что я видел при бэктестинге, поскольку рынок сейчас закрыт, некоторые позитивные сделки также были закрыты... Таким образом, проверка STOPLOSS является третьей переменной для контроля этого.

У меня есть код, представленный ELIHAYUN.

Проверьте это Хендрик...

void CloseOrder(int ticket,double numLots,double close_price)

{

int CloseCnt, err;

// пытаемся закрыть 3 раза

CloseCnt = 0;

while (CloseCnt < 3)

{

if (OrderClose(ticket,numLots,close_price,Slippage,Violet))

{

CloseCnt = 3;

}

else

{

err=GetLastError();

Print(CloseCnt," Ошибка закрытия ордера : (", err , ") " + ErrorDescription(err));

if (err > 0) CloseCnt++;

}

}

}

void CloseHalfSL()

{

double LosePercent = 50.0; // 50% от S/L

for(int i=OrdersTotal()-1;i>=0;i--) // сканируем все ордера и позиции...

{

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if (OrderMagicNumber() != MagicNumber) continue;

if (OrderSymbol()==Symbol())

if (OrderProfit() < 0) // у нас убыточная сделка

{

double prc = Bid;

if (OrderType() == OP_SELL) prc = Ask;

double ord_prc = OrderOpenPrice();

double ord_SL = OrderStopLoss();

int SL_points = MathAbs(ord_prc - ord_SL) / Point;

int Actual_Lose = MathAbs(prc - ord_prc) / Point;

if ( (Actual_Lose * 100 / SL_points) >= LosePercent) // Too much lose

{

CloseOrder(OrderTicket(), OrderLots(), prc);

}

}

}

}

/// ---- Проверьте, не безопасно ли торговать, затем вызовите CloseHalfSL

if (NotSafeToTrade) CloseHalfSL();

 
MarvinSk:
Теперь все ближе

Я добавил следующее:

if ((Safe1!=1)&&(DealTime==2)) {

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

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {

if (OrderSymbol()==Symbol()) {

if (OrderType()==OP_BUY) {

pBid=MarketInfo(OrderSymbol(), MODE_BID);

OrderClose(OrderTicket(), OrderLots(), pBid, slip, clCloseBuy);

}

if (OrderType()==OP_SELL) {

pAsk=MarketInfo(OrderSymbol(), MODE_ASK);

OrderClose(OrderTicket(), OrderLots(), pAsk, slip, clCloseSell);

}

}

}

}

}

В обратном тестировании я вижу, что он закрывает OpenTrades, но мне нужно добавить функцию поиска STOPLOSS, потому что он закрывает сделки, которые имеют ПОЛОЖИТЕЛЬНЫЕ прибыли, когда переменные Safe1 и DealTime совпадают.....

Так что Stoploss должен быть 3-й ловушкой... Я перешлю это на следующей неделе, как только заработаю...

Опять же, это идея, что каждый должен иметь некоторый контроль над существующими открытыми сделками, когда рынок становится волатильным... Если сделка должна остановиться, я предпочитаю, чтобы она остановилась на полпути, а не на 100%. По крайней мере, когда рынок восстановится, вам не придется много наверстывать...

Спасибо

Это может быть способом оставить открытыми ордера с ПОЛОЖИТЕЛЬНЫМ приростом. Добавьте "&& OrderProfit()<0" в строку if(OrderType()".

if ((Safe1!=1)&&(DealTime==2)) {

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

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {

if (OrderSymbol()==Symbol()) {

if (OrderType()==OP_BUY && OrderProfit()<0) {

pBid=MarketInfo(OrderSymbol(), MODE_BID);

OrderClose(OrderTicket(), OrderLots(), pBid, slip, clCloseBuy);

}

if (OrderType()==OP_SELL && OrderProfit()<0) {

pAsk=MarketInfo(OrderSymbol(), MODE_ASK);

OrderClose(OrderTicket(), OrderLots(), pAsk, slip, clCloseSell);

}

}

}

}

}

Вакена

 
Wackena:
Это может быть способом оставить открытыми ордера с ПОЗИТИВНЫМИ ГАЙНАМИ. Добавьте "&& OrderProfit()<0" в строку if(OrderType()".

if ((Safe1!=1)&&(DealTime==2)) {

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

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {

if (OrderSymbol()==Symbol()) {

if (OrderType()==OP_BUY && OrderProfit()<0) {

pBid=MarketInfo(OrderSymbol(), MODE_BID);

OrderClose(OrderTicket(), OrderLots(), pBid, slip, clCloseBuy);

}

if (OrderType()==OP_SELL && OrderProfit()<0) {

pAsk=MarketInfo(OrderSymbol(), MODE_ASK);

OrderClose(OrderTicket(), OrderLots(), pAsk, slip, clCloseSell);

}

}

}

}

}

Вакена

Вакена спасибо... но я внес исправление в наш синтаксис

double pBid, pAsk;

if ((Safe1!=1)&&(DealTime==2)) {

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

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {

if (OrderSymbol()==Symbol()) {

if ((OrderType()==OP_BUY)&&(OrderProfit()<0)){

pBid=MarketInfo(OrderSymbol(), MODE_BID);

OrderClose(OrderTicket(), OrderLots(), pBid, slip, clCloseBuy);

}

if ((OrderType()==OP_SELL)&&(OrderProfit()<0)) {

pAsk=MarketInfo(OrderSymbol(), MODE_ASK);

OrderClose(OrderTicket(), OrderLots(), pAsk, slip, clCloseSell);

}

}

}

}

}

 

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

Единственное исключение, которое у меня есть... Вместо TradingHour от 0 до 24

Я торгую по этой схеме:

0 - 7 EST

11 - 24 EST

Я делаю это, потому что хочу убедиться, что советник явно не торгует во время открытия Нью-Йорка... Я видел слишком большую волатильность в 8 - 10 EST.

Я опубликую свои результаты по ходу недели... У нас есть несколько шумовых новостей на этой неделе, посмотрим, что произойдет.

 

Я только что закончил читать книгу "Наблюдение за птицами в стране львов". Она неплохая. Последняя глава очень полезна. Она также имеет отношение к идее, лежащей в основе "Жар-птицы" и "Феникса". Идея не совсем та же, но очень похожа, и можно легко украсть из нее несколько хороших идей и внедрить их для дальнейшего превращения Firebird в потрясающего эксперта. Если Хендрик, Вакена и несколько других разработчиков Firebird заинтересованы в прочтении этой статьи, дайте мне знать.

 

хочу протестировать Firebird

Привет, Хендрик... Я хочу протестировать новую версию Fire Bird (потому что многие версии Firebird). Вы можете показать мне, пожалуйста, .....

Тяжелая работа ребята за разработку Fire Bird до Phoenix, я уважаю всех вас,...

Спасибо

 

Нет проблем с реальным счетом

MarvinSk:
У кого-нибудь есть реальный счет в InterbankFX

Я получаю следующие ошибки

2006.06.26 20:10:59 : Ордер buy 1.00 USDCHFm opening at 1.2407 sl: 1.2307 tp: 1.2417 failed [Common error]

Значит ли это, что они не разрешают использовать советников на реальных счетах?

У меня есть реальный счет в IBFX, никаких проблем до сих пор...

Причина обращения: