Нужно чтобы, при появлении сигнала выставлялся 1 BUYSTOP?
То, как Вам предложил MrGreen86 должно было подойти, раз не работает - тогда что-то не то с построителем данного ТФ.Пробывал. Не подходит.
Так же пробывал свечу с другого тайфрейма. Не подходит.
Пробывал цену последнего ордера минус или плюс дистанцию в пунктах. Не подходит.
Пробывал время последнего ордера. Не подходит.
значит что-то делаете не так или что-то не учитываете.Пробывал. Не подходит.
Так же пробывал свечу с другого тайфрейма. Не подходит.
Пробывал цену последнего ордера минус или плюс дистанцию в пунктах. Не подходит.
Пробывал время последнего ордера. Не подходит.
вот это вот "... независимо от общего количества ордеров ..."Как сделать чтобы при наличии одного сигнала и следующих сигналов к покупке продолжать открывать по одному BUYSTOP независимо от общего количества ордеров BUYSTOP
и возможно активированных ордеров BUY .?
Пробовал. Открывает огромное количество отложек на первом сигнале.
if(/* Сигнал купить*/) {
if (!isBuySignalActive) {
// покупаем
}
isBuySignalActive = true;
} else {
isBuySignalActive = false;
}
ERR_TRADE_TOO_MANY_ORDERS ?вот это вот "... независимо от общего количества ордеров ..."
а если ДЦ против такого подхода?
Твоя проблема в сигнале. Представь сколько будет открыто ордеров если написать в качестве сигнала что одна МА выше другой МА. И этот сигнал будет сохраняться пока не произойдёт пересечение в другую сторону. Делай так, чтобы сигнал на следующем баре уже не был сигналом. Тогда можно будет поставить запрет открытия на баре на котором уже есть одно открытие.Пробывал. Не подходит.
Так же пробывал свечу с другого тайфрейма. Не подходит.
Пробывал цену последнего ордера минус или плюс дистанцию в пунктах. Не подходит.
Пробывал время последнего ордера. Не подходит.
она самаяERR_TRADE_TOO_MANY_ORDERS ?
С эти всё нормально.должно было подойти, раз не работает - тогда что-то не то с построителем данного ТФ.
вот это вот "... независимо от общего количества ордеров ..."
а если ДЦ против такого подхода?
Не мой уровень..ERR_TRADE_TOO_MANY_ORDERS ?
Так код работает почти как надо...значит что-то делаете не так или что-то не учитываете.
прикрепите ваш код и/или поясните чем именно не подходит
extern int Magic_15 = 8905;
extern int Slippage = 3;
int BuyPos=0,SellPos=0,bs=0,ss=0,iL;
void OnDeinit(const int reason)
{
EventKillTimer();
}
int OnInit()
{EventSetMillisecondTimer(1500);
return(INIT_SUCCEEDED);
}
void OnTimer(){
for (iL=OrdersTotal()-1;iL>=0;iL--)
{
if (OrderSelect(iL, SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic_15) continue;
if (OrderType()==OP_BUYSTOP) bs++;
if (OrderType()==OP_SELLSTOP) ss++;
if (OrderType()==OP_BUY) BuyPos++;
if (OrderType()==OP_SELL) SellPos++;
}
}
if ( /* Сигнал купить*/ )
{
if( bs== 0 && BuyPos == 0 )
{
// 1 BUYSTOP
}
D_S_DELL_15(); D_SS_del_15(); // Удаляем OP_SELL и OP_SELLSTOP
}
if( bs == 0 && BuyPos > 0) {
if( bs == 0) {
if( /* Сигнал купить*/ )
{
// 1 BUYSTOP
}
}
}
}
void D_S_DELL_15(){
{for(int icl=0;icl<=OrdersTotal();icl++){
if(OrderSelect(icl,SELECT_BY_POS)){
if (OrderSymbol()==Symbol()){
if(OrderType()==OP_SELL && OrderMagicNumber()==Magic_15){
if(OrderClose(OrderTicket(),OrderLots(),MarketInfo(Symbol(),MODE_ASK),Slippage))icl--;} }}}}}
void D_B_DELL_15(){
{for(int icl=0;icl<=OrdersTotal();icl++){
if(OrderSelect(icl,SELECT_BY_POS)){
if (OrderSymbol()==Symbol()){
if(OrderType()==OP_BUY && OrderMagicNumber()==Magic_15){
if(OrderClose(OrderTicket(),OrderLots(),MarketInfo(Symbol(),MODE_BID),Slippage))icl--;}}}}}}
void D_SS_del_15(){
for(int id=0;id<=OrdersTotal();id++)
if(OrderSelect(id,SELECT_BY_POS,MODE_TRADES)){
if (OrderSymbol()==Symbol() ){
if(OrderType()==OP_SELLSTOP && OrderMagicNumber()==Magic_15 )
if(OrderDelete(OrderTicket()))id--;}} }
void D_BS_del_15(){
for(int id=0;id<=OrdersTotal();id++)
if(OrderSelect(id,SELECT_BY_POS,MODE_TRADES)){
if (OrderSymbol()==Symbol() ){
if(OrderType()==OP_BUYSTOP && OrderMagicNumber()==Magic_15 )
if(OrderDelete(OrderTicket()))id--;}} }
Но после первого сигнала работает как надо...Твоя проблема в сигнале.
if ( /* Сигнал купить*/ )
{
if( bs== 0 && BuyPos == 0 )
{
// 1 BUYSTOP
}
D_S_DELL_15(); D_SS_del_15(); // Удаляем OP_SELL и OP_SELLSTOP
bs--////////////////?
Sleep( 10 минут); ???
}
if( bs == 0 && BuyPos > 0) {
if( bs == 0) {
if( /* Сигнал купить*/ )
{
// 1 BUYSTOP
}
bs-- ////////////////?
Sleep( 10 минут); ???
}
}
Не вариант.Это самый один может выйти из диапазона и генерировать обратныйДелай так, чтобы сигнал на следующем баре уже не был сигналом. Тогда можно будет поставить запрет открытия на баре на котором уже есть одно открытие.
почти как надо = код мусор и его надо выбросить.Так код работает почти как надо...
1 Сигнал = 1 Ордер
Если есть один BUYSTOP то по сигналу купить через 20 или 45 мин больше не открывает.Нужно чтоб открывал.
какая разница до первого сигнала? в остальном он работает не верно.Но после первого сигнала работает как надо...
может перебор ордеров не так перебирает?
может так быть поможет?
/или поясните чем именно не подходит
какая разница до первого сигнала? в остальном он работает не верно.Но после первого сигнала работает как надо...
С эти всё нормально.
Не мой уровень..
Так код работает почти как надо...
1 Сигнал = 1 Ордер
Если есть один BUYSTOP то по сигналу купить через 20 или 45 мин больше не открывает.Нужно чтоб открывал.
Ну это когда мне за 40 лет и я точно знаю что у меня 43 размер обуви.поясните чем именно не подходит
Time[0] - время открытия последнего бара текущего символа по текущему таймфрейму...По коду Time[0] содержит время открытия каждого бара текущего графика.
Это самый один может выйти из диапазона и генерировать обратный
сигнал который не по плану.
static datetime last_signal = 0; ---можно указать 10 минут или в 600 секундах?
if(/* Сигнал купить*/ && Time[0] > last_signal)
{
last_signal = Time[0];
// покупаем
}
Если да ,то возможно был не прав что не подходит вариант и нужно пробовать на открытии .
А как ты думаешь, если в строке 3 переменные bs и BuyPos равны 0, в строке 5 ставишь ордер. Так? И что даст твой сон в течении 10 минут? Разве в это время переменная bs может изменить своё значение??? Потом ты в строке 13 и 14 проверяешь bs на равенство нулю. И что? Она так и осталась равна нулю. Хоть сутки проспи.Но после первого сигнала работает как надо...
может перебор ордеров не так перебирает?
может так быть поможет?
Код:if ( /* Сигнал купить*/ ) { if( bs== 0 && BuyPos == 0 ) { // 1 BUYSTOP } D_S_DELL_15(); D_SS_del_15(); // Удаляем OP_SELL и OP_SELLSTOP bs--////////////////? Sleep( 10 минут); ??? } if( bs == 0 && BuyPos > 0) { if( bs == 0) { if( /* Сигнал купить*/ ) { // 1 BUYSTOP } bs-- ////////////////? Sleep( 10 минут); ??? } }
А как ты думаешь, если в строке 3 переменные bs и BuyPos равны 0, в строке 5 ставишь ордер. Так? И что даст твой сон в течении 10 минут? Разве в это время переменная bs может изменить своё значение??? Потом ты в строке 13 и 14 проверяешь bs на равенство нулю. И что? Она так и осталась равна нулю. Хоть сутки проспи.
if ( /* Сигнал купить*/ )
{
if( bs== 0 && BuyPos == 0 )
{
// 1 BUYSTOP
}
D_S_DELL_15(); D_SS_del_15(); // Удаляем OP_SELL и OP_SELLSTOP
bs-- МИНУСУЕМ ИЗ ПЕРЕБОРА ОРДЕРОВ -1 BUYSTOP
}
Sleep( 9 минут); ЛОЖИМ СОВУ СПАТЬ НА 9 МИН И СИГНАЛА КУПИТЬ НЕТ :)
В РЫНКЕ 1 BUYSTOP НО ПО СЧЁТЧИКУ 0
ПРОСЫПАЕМСЯ И ПРОВЕРЯЕМ: ЕСЛИ BUYSTOP СТАЛ БАЕМ ТО bs == 0 && BuyPos>0
if( bs == 0 && BuyPos > 0 && BuyPos == 0 ) {
if( bs == 0) {
if( /* Сигнал купить*/ )
{
// 1 BUYSTOP
}
bs--
BuyPos --
Sleep( 9 минут); ???
}
}