Я думаю, что ошибка заключается в том, как вы размещаете свои ордера. Если вы используете стоп-ордера, то ваши ордера находятся слишком близко к рыночной цене. Как правило, ваш стоп-ордер должен находиться на расстоянии не менее "MarketInfo(Symbol(),MODE_STOPLEVEL)" пунктов от текущей цены спроса.
Если вы размещаете стоп-ордера, убедитесь, что вы используете RefreshRates(), а затем разместите ордера на требуемом расстоянии. На быстро движущихся рынках это может не сработать, и вам придется размещать ордера на большем расстоянии.
Надеюсь, это поможет.
Привет
Я получаю сообщение об ошибке 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...
Привет!
Ну, как вы видите, я новичок на этом форуме. Я Игнасио, из Аргентины. И я пытаюсь разработать простой советник.
Я думаю, что стратегия "готова". Но когда я запускаю бэктест, никакие ордера не открываются. Я распечатал отладочную информацию, и все условия в порядке. Ошибка, которую выдает функция OrderSend, равна 138.
Код следующий:
RefreshRates();
OrderSend( Symbol(), OP_BUY, Lots, Slippage, Ask, 0.0, 0.0, c , magic_number, 0, Blue);
Может ли кто-нибудь объяснить мне, что не так?
Спасибо всем.
зажигание...Ошибка 138 означает, что произошел реквот. Пробовали ли вы использовать большее значение пункта для проскальзывания, что-то вроде между 3 и 5?
Спасибо за ваши ответы,
Maji, я протестировал несколько значений проскальзывания в цикле, и OrderSend выдает ту же ошибку.
elihayun, я правильно добавил ваше условие и все равно та же ошибка.
Я провел много тестов, но никаких результатов.
Есть какие-нибудь предложения? Я очень хочу закончить этот советник, чтобы сделать другой, более серьезный.
Спасибо всем
ign...
Во-первых, чтобы получить описание ошибки, сделайте следующее
после ссылки #property добавьте строку
#property link "http://www.elihayun.com"
#include
Теперь, чтобы проверить ошибку, сделайте следующее
if (err != 0)
{
Print("Error # ", err, " ", ErrorDescription(err));
}Для вашей проблемы я не могу придумать другой проблемы. Возможно, вы используете другие RefreshRates() Попробуйте закомментировать их
// RefreshRates()
Сначала, чтобы получить описание ошибки, сделайте следующее
после ссылки #property добавьте строку
#property link "http://www.elihayun.com"
#include
Теперь, чтобы проверить ошибку, сделайте следующее
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));
}

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Привет
Я получаю сообщение об ошибке 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
Возможно, моя проверка стопов просто не работает правильно.
Есть предложения?