[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 262

 
Valdemar:

Господа,не подскажете мне,в каком месте я ошибся,когда вставил в свой код советника эту функцию работы по времени:

компилятор просто меня засыпал ошибками.



В том месте, где Вы объявили функцию внутри другой функции:

int init()
  {
  
bool isTradeTimeInt (int hb=05,int mb=50,int he=23,int me=00) 
    {
 
Roll:

См. 10-й параметр указанной функции. Выставить в 0.

OrderSend(g_symbol_284, OP_BUY, Lots, g_ask_528 - gi_164 * g_point_400, Slippage, l_price_40, l_price_32, 0, g_magic_112, "Newest", MediumBlue);

нашел эту строчку и что там поменять ?

 
Starting:

Использование простое - я запускаю скрипт...

Что и требовалось доказать. То есть, Вам нужен код, который определит нужный ордер. Таких ситуаций десятки, на каждую специальную функцию, чтобы упростить код, не припасешь. Надо его писать для каждого конкретного случая.
Примеры близких по духу функций находятся тут: Полезные функции от KimIV

Если не подойдет готовая, то можно скомпоновать себе нужную по аналогии с имеющимися.
 
Bicus:

Здесь расчет на инерцию цены. Т.е. сработал стоп-лосс у первого ордера, второй находится в профите по значению немногим меньше убытка. Если цена в этом же направлении пробежит еще немного - то да, можно оказаться в суммарном плюсе.

Но, имхо, стратегия такая выеденного яица не стоит.

Ага, точно! Гадания на тему: а пройдет ли оно еще на пару пипсов в профитную сторону :)
 
granit77:
Что и требовалось доказать. То есть, Вам нужен код, который определит нужный ордер. Таких ситуаций десятки, на каждую специальную функцию, чтобы упростить код, не припасешь. Надо его писать для каждого конкретного случая.
Примеры близких по духу функций находятся тут: Полезные функции от KimIV

Если не подойдет готовая, то можно скомпоновать себе нужную по аналогии с имеющимися.


Мне кажется, я не совсем донес сути задачи.

Утверждение 1. Любой код, после того, как сработал отложенник, при обращении к дате открытия этого ордера (ставшего рыночным в момент сработки), получит дату открытия равной дате установки отложенника - так работает функция OrderOpenTime().

Утверждение 2. Без эксперта, постоянно отслеживающего состояние ордеров на счету, запомнить точное время сработки отложенника не получится.


Возможное решение 1. Побарово пробежаться от даты установки отложенника до текущей даты, и записать время первого пересечения цены открытия с уровнем сработки отложенника.

Это будет более или менее точное время, но есть большой минус: спред. Т.к. спред в истории не пишется (я не беру здесь вариант тиковой истории со спредом от Дукас, например, т.к. сейчас торгую не на Дукас и ее, такую историю со спредом, нужно писать и накапливать), может, ордер сработал гораздо раньше, когда цена почти касалась уровня открытия, но его не пересекала, а за счет расширенного спреда ордер был открыт уже тогда, а не позже, когда видим фактическое пересечение ценой линии постановки отложенника.


Наиболее вероятное решение - сделать эксперт, повесить на график и мониторить ордера на счету. Этого делать не хочу, по ряду причин, есть и минусы, связанные с возможными проблемами в перерывах работы эксперта, но, вижу, что придется, мыслей других пока не возникает.


Функции, те, на кот. Вы дали ссылку, обращаются к функции OrderOpenTime(). Для отложенников сработавших это будет дата их постановки, а не сработки. Поэтому функции имеющиеся не подходят. И скомпоновать их тоже никак, т.к. все равно они обращаются за датой открытия ордера к OrderOpenTime().

 
Pyxlik2009:

OrderSend(g_symbol_284, OP_BUY, Lots, g_ask_528 - gi_164 * g_point_400, Slippage, l_price_40, l_price_32, 0, g_magic_112, "Newest", MediumBlue);

нашел эту строчку и что там поменять ?

Выведите через Print параметры и смотрите
 
Pyxlik2009:

OrderSend(g_symbol_284, OP_BUY, Lots, g_ask_528 - gi_164 * g_point_400, Slippage, l_price_40, l_price_32, 0, g_magic_112, "Newest", MediumBlue);

нашел эту строчку и что там поменять ?

у вас десятый параметр "Newest", а требуется число - время истечения ордера
 

вот вся строчка

if (!(AccountFreeMarginCheck(g_symbol_284, OP_BUY, Lots) <= 0.0 || GetLastError() == 134/* NOT_ENOUGH_MONEY */)) g_ticket_352 = OrderSend(g_symbol_284, OP_BUY, Lots, g_ask_528 - gi_164 * g_point_400, Slippage, l_price_40, l_price_32, 0, g_magic_112, "Newest RX-1", MediumBlue);
 
 
Pyxlik2009:

вот вся строчка

еще раз:

Документация:

int OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)

у вас десятый параметр в строке "Newest" - числом не является. Потому и ошибка

 

PapaYozh
:


В том месте, где Вы объявили функцию внутри другой функции:

int init()
  {
  
bool isTradeTimeInt (int hb=05,int mb=50,int he=23,int me=00) 
    {


Спасибо за Ваш отзыв уважаемый PapaYozh,но я ведь и в int start() вставлял данную функцию,от этого всёровно не меняется итог компилятора.

int start()
{
int H,M,Ticket;
double Max,Min,
Max1,Min1,
TP,
Total;

bool isTradeTimeInt(int hb=07,int mb=55,int he=23,int me=00) 
    {
  datetime db, de;           // Время начала и окончания работы
  int      hc;               // Часы текущего времени торгового сервера

  db=StrToTime(TimeToStr(TimeCurrent(), TIME_MINUTES)+" "+hb+":"+mb);
  de=StrToTime(TimeToStr(TimeCurrent(), TIME_MINUTES)+" "+he+":"+me);
  hc=TimeHour(TimeCurrent());
  if (db>=de) {
    if (hc>=he) de+=24*60*60; else db-=24*60*60;
  

  if (TimeCurrent()>=db && TimeCurrent()<=de) return(True);
  else return(False);
}
 

H=Hour();
M=Minute();
Total=OrdersTotal();
if(Total==0)
{
if(isTradeTimeInt==true)
{
   Max=High[iHighest(Symbol(),PERIOD_M5,MODE_HIGH,12,0)];
   Min=Low[iLowest(Symbol(),PERIOD_M5,MODE_LOW,12,0)];
и в итоге компилятор показал мне вот эти ошибки,и я так понимаю он ссылается на неправельное определение переменных?

Вы уж извиняйте за какие либо неудобства,непонятности,всётаки только начинаю набираться опыта в таком не лёком деле,и думаю благодаря этому форуму и откликнувшимся здесь людям,продолжаю развиваться,улучшать вои навыки,спасибо вам.



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