АвторСообщение





Сообщение: 877
Настроение: нормальное
Зарегистрирован: 20.10.14
Откуда: Россия
Репутация: 0
ссылка на сообщение  Отправлено: 13.10.16 14:47. Заголовок: Программирование.


Здравствуйте. Подскажите, почему ордер не открывается?

input int Slippage=30;
input int Magic=156;
input double Lot=0.1;
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void OnTick()
{
double TP=0;
double cena_ma_1=0;
cena_ma_1=iMA(_Symbol,0,10,0,0,0,1);
int total=OrdersTotal();
for(int i=total-1; i>=0; i--)
if(OrderSelect(i,SELECT_BY_POS))
if(OrderSymbol()==Symbol())
{
double openB=OrderOpenPrice();
if(openB>cena_ma_1)
{
int tiket=OrderSend(_Symbol,OP_BUY,Lot,Ask,Slippage,0,TP,NULL,Magic,0,clrBlue);
{
Alert("Ордер открылся");
}
}
}
}


Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 46 , стр: 1 2 3 4 All [только новые]







Сообщение: 2530
Зарегистрирован: 03.03.13
Откуда: Украина, Каменское (Днепродзержинск)
Репутация: 3
ссылка на сообщение  Отправлено: 30.07.17 15:16. Заголовок: allisbob пишет: что..


allisbob пишет:

 цитата:
что присваивается переменной dtLastOrderTime?


Прошу прощения, опечатка. Это переменная dtLastTime.

Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 1
Зарегистрирован: 20.08.17
Репутация: 0
ссылка на сообщение  Отправлено: 20.08.17 21:18. Заголовок: Скажите, как рассчит..


Скажите, как рассчитать СЛ и ТП по ADX /

double adx(int bar)
{
return(iADX(Symbol(),0,ADX_Period,PRICE_CLOSE,MODE_MAIN,bar));
}

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 2536
Зарегистрирован: 03.03.13
Откуда: Украина, Каменское (Днепродзержинск)
Репутация: 3
ссылка на сообщение  Отправлено: 21.08.17 10:49. Заголовок: bro пишет: Скажите,..


bro пишет:

 цитата:
Скажите, как рассчитать СЛ и ТП по ADX /


Чтобы привести какой-то код, нужно сначала определиться с тем, каким именно образом хочется рассчитывать SL и TP. То есть для начала метод нужно придумать и описать. Тогда и до кода можно дойти. Пока же Вы привели только код, который получает значение главной линии ADX.

Спасибо: 1 
ПрофильЦитата Ответить



Сообщение: 2
Зарегистрирован: 20.08.17
Репутация: 0
ссылка на сообщение  Отправлено: 21.08.17 11:27. Заголовок: Scriptong пишет: ..


Scriptong пишет:
[quote]`
Допустим главная линия ADX показывает 47.7708
Берем 47, для пятизнака будет 470 пунктов.

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 2537
Зарегистрирован: 03.03.13
Откуда: Украина, Каменское (Днепродзержинск)
Репутация: 3
ссылка на сообщение  Отправлено: 21.08.17 15:56. Заголовок: bro пишет: Допустим..


bro пишет:

 цитата:
Допустим главная линия ADX показывает 47.7708
Берем 47, для пятизнака будет 470 пунктов.



Ну тогда так. В настроечных параметрах:

 цитата:
input uint i_uKoef = 10; // Коэффициент умножения пунктов

enum ENUM_TRADE_SIGNAL
{
TRADE_SIGNAL_NONE, // Нет торгового сигнала
TRADE_SIGNAL_BUY, // Торговый сигнал Buy
TRADE_SIGNAL_SELL // Торговый сигнал Sell
};



В функции расчета торгового сигнала:

 цитата:
ENUM_TRADE_SIGNAL GetTradeSignal()
{

if (<условия для открытия Buy>)
return TRADE_SIGNAL_BUY;
if (<условия для открытия Sell>)
return TRADE_SIGNAL_SELL;

return TRADE_SIGNAL_NONE;
}



При открытии ордера:

 цитата:

ENUM_TRADE_SIGNAL eSignal = GetTradeSignal();
if (eSignal == TRADE_SIGNAL_NONE)
return;

double fADXValue = MothRound(iADX(Symbol(),0,ADX_Period,PRICE_CLOSE,MODE_MAIN,bar));
if (eSignal == TRADE_SIGNAL_BUY)
OrderSend(Symbol(), OP_BUY, fLots, uSlippage, Ask, Ask - fADXValue * i_uKoef, Ask + fADXValue * i_uKoef);
if (eSignal == TRADE_SIGNAL_SELL)
OrderSend(Symbol(), OP_SELL, fLots, uSlippage, Bid, Bid + fADXValue * i_uKoef, Bid - fADXValue * i_uKoef);



Это грубо, конечно. Ведь перед открытием ордера нужно произвести огромное количество проверок.

Спасибо: 1 
ПрофильЦитата Ответить



Сообщение: 3
Зарегистрирован: 20.08.17
Репутация: 0
ссылка на сообщение  Отправлено: 23.08.17 17:00. Заголовок: Здравствуйте. Интере..


Здравствуйте. Интересует вопрос: можно ли на нулевом баре гарантированно открывать ордера. Допустим если уже есть Бай, то при состоянии "индикатор ниже уровня" гарантированно откроется противоположный ордер. Если так можно сделать то почему в этом коде не получается ?

if(NewBar()==true)
{
cluch_buy=false;
cluch_sell=false;
}
//double ma=iMA(NULL,0,Ma_Period,0,MODE_SMMA,PRICE_MEDIAN,0);
//double ma1=iMA(NULL,0,Ma_Period,0,MODE_SMMA,PRICE_MEDIAN,1);
double rsi1=iRSI(Symbol(),0,RSI1,PRICE_CLOSE,0);
double rsi2=iRSI(Symbol(),0,RSI1,PRICE_CLOSE,1);
//double rsi3=iRSI(Symbol(),0,RSI2,PRICE_CLOSE,0);
//double rsi4=iRSI(Symbol(),0,RSI2,PRICE_CLOSE,1);

if(rsi1>s1 && rsi2<s1)
if(cluch_buy==false)
{
ticket=OrderSend(Symbol(),OP_BUY,Lot,Ask,slipp,0,0,"My order",Magic,0,clrBlue);
if(ticket<0)
{
Print("OrderSend завершилась с ошибкой #",GetLastError());
}
else
Print("Функция OrderSend успешно выполнена");
cluch_buy=true;
cluch_sell=false;
}
if(rsi1<s1 && rsi2>s1)
if(cluch_sell==false)
{
ticket=OrderSend(Symbol(),OP_SELL,Lot,Bid,slipp,0,0,"My order",Magic,0,clrRed);
if(ticket<0)
{
Print("OrderSend завершилась с ошибкой #",GetLastError());
}
else
Print("Функция OrderSend успешно выполнена");
cluch_sell=true;
cluch_buy=false;
}
}

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 2539
Зарегистрирован: 03.03.13
Откуда: Украина, Каменское (Днепродзержинск)
Репутация: 3
ссылка на сообщение  Отправлено: 23.08.17 18:44. Заголовок: bro пишет: Здравств..


bro пишет:

 цитата:
Здравствуйте. Интересует вопрос: можно ли на нулевом баре гарантированно открывать ордера. Допустим если уже есть Бай, то при состоянии "индикатор ниже уровня" гарантированно откроется противоположный ордер. Если так можно сделать то почему в этом коде не получается ?


Чтобы ответить на этот вопрос, нужно видеть весь код. А здесь лишь кусок кода. В нем по поводу вопроса все нормально. Разве что заметьте, что существует функция NewBar(), которая по содержанию должна срабатывать только один раз на бар. А это влечет за собой отсутствие сброса флага cluch_buy.

Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 4
Зарегистрирован: 20.08.17
Репутация: 0
ссылка на сообщение  Отправлено: 23.08.17 22:22. Заголовок: Scriptong пишет: Чт..


Scriptong пишет:

 цитата:
Чтобы ответить на этот вопрос, нужно видеть весь код. А здесь лишь кусок кода. В нем по поводу вопроса все нормально. Разве что заметьте, что существует функция NewBar(), которая по содержанию должна срабатывать только один раз на бар. А это влечет за собой отсутствие сброса флага cluch_buy.


Да проверка на баре не походит. Код исполняется внутри бара. Что с чем сравнивать для корректной работы приведенной части кода ?

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 2541
Зарегистрирован: 03.03.13
Откуда: Украина, Каменское (Днепродзержинск)
Репутация: 3
ссылка на сообщение  Отправлено: 29.08.17 12:39. Заголовок: bro пишет: Да прове..


bro пишет:

 цитата:
Да проверка на баре не походит. Код исполняется внутри бара. Что с чем сравнивать для корректной работы приведенной части кода ?


К сожалению, не могу сказать. Нужно видеть всю логику. Иначе буду лишь гадать.

Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 5
Зарегистрирован: 20.08.17
Репутация: 0
ссылка на сообщение  Отправлено: 05.09.17 11:21. Заголовок: Здравствуйте. Как пр..


Здравствуйте. Как прописать в коде, чтобы закрытие, открытие ордера происходило не на новом(0) баре, а на первом ?

Например есть открытый ордер Бай, нарисовалась медвежья свеча и в момент, по факту закрытия этой(а не открытия новой) свечи, закрываем ордер.
Время, не должно иметь значения. Закрытие текущего бара, не должно сопоставляться с открытием нового. Пусть, даже это не грамотно и убыточно, с точки зрения программирования, или торговли.

Можно пример кода ?

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 2542
Зарегистрирован: 03.03.13
Откуда: Украина, Каменское (Днепродзержинск)
Репутация: 3
ссылка на сообщение  Отправлено: 05.09.17 12:22. Заголовок: bro пишет: Здравств..


bro пишет:

 цитата:
Здравствуйте. Как прописать в коде, чтобы закрытие, открытие ордера происходило не на новом(0) баре, а на первом ?

Например есть открытый ордер Бай, нарисовалась медвежья свеча и в момент, по факту закрытия этой(а не открытия новой) свечи, закрываем ордер.
Время, не должно иметь значения. Закрытие текущего бара, не должно сопоставляться с открытием нового. Пусть, даже это не грамотно и убыточно, с точки зрения программирования, или торговли.


Если нужно, чтобы по окончании свечи закрывался ордер, открытый на ней, то так:

 цитата:

// Выбрать ордер (по тикету или по индексу)
...
// ~--------------
if (OrderOpenTime() >= iOpen(NULL, 0, 0))
return; // или continue, если все это в цикле

if (OrderType() == OP_BUY && iOpen(NULL, 0, 1) > iClose(NULL, 0, 1))
{
// закрыть ордер
}
if (OrderType() == OP_SELL && iOpen(NULL, 0, 1) < iClose(NULL, 0, 1))
{
// закрыть ордер
}




Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 6
Зарегистрирован: 20.08.17
Репутация: 0
ссылка на сообщение  Отправлено: 05.09.17 13:38. Заголовок: Scriptong пишет: Ес..


Scriptong пишет:

 цитата:
Если нужно, чтобы по окончании свечи закрывался ордер, открытый на ней, то так:


Нет, не на ней, на другой свече.

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 2543
Зарегистрирован: 03.03.13
Откуда: Украина, Каменское (Днепродзержинск)
Репутация: 3
ссылка на сообщение  Отправлено: 05.09.17 14:52. Заголовок: bro пишет: Нет, не ..


bro пишет:

 цитата:
Нет, не на ней, на другой свече.


Значит, увеличьте индексы во всех функциях iOpen и iClose на столько баров, сколько требуется.

Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 429
Зарегистрирован: 25.08.13
Репутация: 1
ссылка на сообщение  Отправлено: 27.09.18 20:10. Заголовок: Помогите с кодом


Доброго времени, Игорь!

Подобный вопрос наверное раз в сотый Вам задают...

Открывается ордер при выполнении условий... например

{
if (RSI12_2>50 && RSI12_1<50)
{
OrderSend(Symbol(),OP_SELL,1.0,Bid,3,Bid+SL*Point,0,"",1,0,CLR_NONE);
}
}

Это происходит на часовом таймфрейме....
Ордер, к примеру, через 10 минут закрывается по стопу, т.е. внутри часового бара. Сразу открывается новый, потому что условие для открытия ордера выполняется пока не закончится час. Снова закрывается с убытком и снова открывается новый...

Что добавить в код, чтобы открывался в течение бара (часа) только один ордер. Если он закроется с убытком, то новый бы не открывался?
Может функция sleep? Подскажите пожалуйста.

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 2627
Зарегистрирован: 03.03.13
Откуда: Украина, Каменское (Днепродзержинск)
Репутация: 3
ссылка на сообщение  Отправлено: 28.09.18 17:04. Заголовок: Evgeny пишет: Ордер..


Evgeny пишет:

 цитата:
Ордер, к примеру, через 10 минут закрывается по стопу, т.е. внутри часового бара. Сразу открывается новый, потому что условие для открытия ордера выполняется пока не закончится час. Снова закрывается с убытком и снова открывается новый...

Что добавить в код, чтобы открывался в течение бара (часа) только один ордер. Если он закроется с убытком, то новый бы не открывался?


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

 цитата:

bool IsOrderOpenedLaterThanSpecifiedTime(datetime dtTime)
{
for (int i = OrdersHistoryTotal() - 1; i >= 0; --i)
{
if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
continue;
if (OrderSymbol() != Symbol())
continue;
if (OrderOpenTime() >= dtTime)
return true;
}

return false;
}


Использование:

 цитата:

if (!IsOrderOpenedLaterThanSpecifiedTime(iTime(NULL, 0, 0)))
{
// Можно открывать ордер
}



Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 46 , стр: 1 2 3 4 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  2 час. Хитов сегодня: 0
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет