Коды ошибок

 

Привет

Я получаю сообщение об ошибке invalid stops err 130 i.e.

Я распечатываю свои значения и они следующие

2006.06.29 13:15:05 AUDUSD,H1: OrderDetails: SellPrice : 0.731, CurrentBid : 0.731, stoploss : 0.7319, takeprofit : 0.7291, slippage : 2

Я использую следующее, чтобы проверить мои sl и tp перед размещением ордера.

/

if (StopLoss<=MarketInfo(Symbol(),MODE_STOPLEVEL)) StopLoss=MarketInfo(Symbol(),MODE_STOPLEVEL)+3;

if (TakeProfit<=MarketInfo(Symbol(),MODE_STOPLEVEL)) TakeProfit=2*(MarketInfo(Symbol(),MODE_STOPLEVEL)+3);

Иногда продажа проходит, как показано ниже

2006.06.29 08:32:56 AUDUSD,H1: open #5976740 sell 0.01 AUDUSD at 0.7309 sl: 0.7324 tp: 0.7278 ok

Возможно, моя проверка стопов просто не работает правильно.

Есть предложения?

 

Я думаю, что ошибка заключается в том, как вы размещаете свои ордера. Если вы используете стоп-ордера, то ваши ордера находятся слишком близко к рыночной цене. Как правило, ваш стоп-ордер должен находиться на расстоянии не менее "MarketInfo(Symbol(),MODE_STOPLEVEL)" пунктов от текущей цены спроса.

Если вы размещаете стоп-ордера, убедитесь, что вы используете RefreshRates(), а затем разместите ордера на требуемом расстоянии. На быстро движущихся рынках это может не сработать, и вам придется размещать ордера на большем расстоянии.

Надеюсь, это поможет.

 

это покупка/продажа, а не стоп

Привет

Спасибо, но это не стоп, это торговля - покупка/продажа, я попробую 2*MarketInfo(Symbol(),MODE_STOPLEVEL)

 
cardio:
Привет

Я получаю сообщение об ошибке invalid stops err 130 i.e.

Я распечатываю свои значения, и они следующие

2006.06.29 13:15:05 AUDUSD,H1: OrderDetails: SellPrice : 0.731, CurrentBid : 0.731, stoploss : 0.7319, takeprofit : 0.7291, slippage : 2

Я использую следующее, чтобы проверить мои sl и tp перед размещением ордера.

/

if (StopLoss<=MarketInfo(Symbol(),MODE_STOPLEVEL)) StopLoss=MarketInfo(Symbol(),MODE_STOPLEVEL)+3;

if (TakeProfit<=MarketInfo(Symbol(),MODE_STOPLEVEL)) TakeProfit=2*(MarketInfo(Symbol(),MODE_STOPLEVEL)+3);

Иногда продажа проходит, как показано ниже

2006.06.29 08:32:56 AUDUSD,H1: open #5976740 sell 0.01 AUDUSD at 0.7309 sl: 0.7324 tp: 0.7278 ok

Возможно, моя проверка стопов просто не работает правильно.

Есть предложения?

Возможно, вы используете "+ 3" как в покупке, так и в продаже. В продаже вы должны поставить "-3", чтобы сделать цену действительной.

 

это не проблема

Я начинаю думать, что interbankfx пытается предотвратить скальпинг, когда рынок напряжен. Он работает, когда рынок не напряжен - все равно это сбивает с толку, так как если sl и tp больше чем MarketInfo(Symbol(),MODE_STOPLEVEL), он должен открыть сделку.

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

StopLoss = NormalizeDouble((TradeAbovePct/100)*(DemaH-DemaL)*(1/Point),0);

if (StopLoss<=MarketInfo(Symbol(),MODE_STOPLEVEL)) StopLoss=MarketInfo(Symbol(),MODE_STOPLEVEL)+3;

TakeProfit = NormalizeDouble(2*((DemaH-DemaL)*(1/Point)),0);

if (TakeProfit<=MarketInfo(Symbol(),MODE_STOPLEVEL)) TakeProfit=2*(MarketInfo(Symbol(),MODE_STOPLEVEL)+3);

//Then I call a buy and sell as needed

//e.i

OpenBuy1(10);

OpenSell1(10);

////////////////////////////////////////////////

bool OpenBuy1(int pips1)

{

int ticket;

string comment="";

//reset defaults

use_MTBE = use_MTBEd;

use_split = use_splitd;

RefreshRates();

price1 = Ask;

stoploss1 = NormalizeDouble(price1-StopLoss*Point,Digits);

tp1 = NormalizeDouble(price1+TakeProfit*Point,Digits);

//expire1 = iTime(Symbol(),TimeFrame,0)+TimeFrame*HoursStopOpen*60;

Print("Openbuy lots: ", Lots);

if(UseStopLoss)

ticket=OrderSend(Symbol(),OP_BUY,Lots,price1,2,stoploss1,tp1,comment,MAGICMA,0,Orange);

else

ticket=OrderSend(Symbol(),OP_BUY,Lots,price1,2,0,tp1,comment,MAGICMA,0,Orange);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

{

Print("BUY order opened : ",OrderOpenPrice());

//time1 = CurTime()+2*60*Period();

return(true);

}

}

else

{

Print("Error opening BUY order : ",GetLastError());

Print("OrderDetails: BuyPrice : ",price1," ,CurrentAsk : ", Ask," ,stoploss : ",stoploss1," ,takeprofit : ",tp1," ,slippage : ",2);

return(false);

}

}

bool OpenSell1(int pips1)

{

int ticket;

string comment="";

//reset defaults

use_MTBE = use_MTBEd;

use_split = use_splitd;

RefreshRates();

price1 = Bid;

stoploss1 = NormalizeDouble(price1+StopLoss*Point,Digits) ;

tp1 = NormalizeDouble(price1-TakeProfit*Point,Digits);

// expire1 = iTime(Symbol(),TimeFrame,0)+TimeFrame*HoursStopOpen*60;

Print("Opensell lots: ", Lots);

if(UseStopLoss)

ticket=OrderSend(Symbol(),OP_SELL,Lots,price1,2,stoploss1,tp1,comment,MAGICMA,0,Red);

else

ticket=OrderSend(Symbol(),OP_SELL,Lots,price1,2,0,tp1,comment,MAGICMA,0,Red);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

{

Print("SELL order opened : ",OrderOpenPrice());

// time1 = CurTime()+2*60*Period();

return(true);

}

}

else

{

Print("Error opening SELL order : ",GetLastError());

Print("OrderDetails: SellPrice : ",price1," ,CurrentBid : ", Bid," ,stoploss : ",stoploss1," ,takeprofit : ",tp1," ,slippage : ",2);

return(false);

}

}

 

Требуется помощь - Ошибка 138 при открытии заказов

Здравствуйте!

Как вы видите, я новичок на этом форуме. Я Игнасио, из Аргентины. И я пытаюсь разработать простой советник.

Я думаю, что стратегия "готова". Но когда я запускаю бэктест, никакие ордера не открываются. Я распечатал отладочную информацию, и все условия в порядке. Ошибка, которую выдает функция OrderSend, равна 138.

Код следующий:

RefreshRates();

OrderSend( Symbol(), OP_BUY, Lots, Slippage, Ask, 0.0, 0.0, c , magic_number, 0, Blue);

Может ли кто-нибудь объяснить мне, что не так?

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

ign...

 
ignacio:
Привет!

Ну, как вы видите, я новичок на этом форуме. Я Игнасио, из Аргентины. И я пытаюсь разработать простой советник.

Я думаю, что стратегия "готова". Но когда я запускаю бэктест, никакие ордера не открываются. Я распечатал отладочную информацию, и все условия в порядке. Ошибка, которую выдает функция OrderSend, равна 138.

Код следующий:

RefreshRates();

OrderSend( Symbol(), OP_BUY, Lots, Slippage, Ask, 0.0, 0.0, c , magic_number, 0, Blue);

Может ли кто-нибудь объяснить мне, что не так?

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

зажигание...

Ошибка 138 означает, что произошел реквот. Пробовали ли вы использовать большее значение пункта для проскальзывания, что-то вроде между 3 и 5?

 

Я думаю, что в бэктесте нет такого понятия, как реквот. Проблема, на мой взгляд, возникает из-за "RefreshRates", которые, возможно, в бэктестинге могут вызвать проблему реквот. Рассмотрим следующее

if (!isTesting()) RefreshRates();

 

Спасибо за ваши ответы,

Maji, я протестировал несколько значений проскальзывания в цикле, и OrderSend выдает ту же ошибку.

elihayun, я правильно добавил ваше условие и все равно та же ошибка.

Я провел много тестов, но никаких результатов.

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

Спасибо всем

ign...

 

Во-первых, чтобы получить описание ошибки, сделайте следующее

после ссылки #property добавьте строку

#property link "http://www.elihayun.com"

#include

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

int err = GetLastError();

if (err != 0)

{

Print("Error # ", err, " ", ErrorDescription(err));

}

Для вашей проблемы я не могу придумать другой проблемы. Возможно, вы используете другие RefreshRates() Попробуйте закомментировать их

// RefreshRates()

 
elihayun:
Сначала, чтобы получить описание ошибки, сделайте следующее

после ссылки #property добавьте строку

#property link "http://www.elihayun.com"

#include

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

int err = GetLastError();

if (err != 0)

{

Print("Error # ", err, " ", ErrorDescription(err));

}[/PHP]

For your problem, I cannot think of another problem. Maybe u are using another RefreshRates() Try to comment them out

// RefreshRates()

Вот внешний вид скрипта:

2006.07.02 11:07:15 2006.01.04 12:00 eaButler EURUSD,H4: Error Description [#138]: requote

2006.07.02 11:07:15 2006.01.04 12:00 stdlib EURUSD,H4: loaded successfully

, а вот код:

[PHP]

last_ticket = OrderSend( Symbol(), OP_SELL, Lots, Slippage, Bid, 0.0, 0.0, c , magic_number, 0, Red);

if(last_ticket < 0)

{

rv = GetLastError();

Print("Описание ошибки [#"+ rv + "]: " + ErrorDescription(rv));

}