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

 
eugggy:
bar - это сдвиг текущего бара относительно времени, установленного во внешних настройках(Start_Point).

bar = ?? в момент удаления чему?
 
ask: Хамить обязательно?

Это Вы сейчас хамите: постановки задачи до сих пор нет, а то, что Вы накалякали, - вообще невесть что, даже псевдокодом не назовешь.

И Вы считаете, что я неправильно Вас отправил к телепатам?

 
sergeev:

bar = ?? в момент удаления чему?
Надеюсь, что предыдущему своему значению. Т.е. если документ мне не нужен по прошествии бара я должен его удалить.
 
eugggy:
Надеюсь, что предыдущему своему значению

ну и надейтесь, авось проканает.

 
sergeev:

ну и надейтесь, авось проканает.



:-) А вот просто указать на ошибку, так нельзя?
 
eugggy:
:-) А вот просто указать на ошибку, так нельзя?

:) а ответить на вопрос чему bar=??, так нельзя ?
 
sergeev:

:) а ответить на вопрос чему bar=??, так нельзя ?
Ну так тема для новичков, и если б я был уверен, чему равен бар в момент удаления, то может и советник бы работал. Я думаю так: когда закрывается документ, т.е. появляется новый бар, переменная bar увеличивает своё значение на 1, в функции удаления, я ставлю bar-1, т.е номер уже закрытого документа и если предыдущий бар не соответствует заданным критериям, удаляется документ, в значении которого указан номер = текущему значению переменной bar минус 1. А не может ли ошибка быть следствием того, что я удаляю уже удалённый документ?
 

никто увы ошибку не заметил. потому еще раз

не подскажете ошибку в коде? спасибо.

//+------------------------------------------------------------------+
//| линия.mq4 |
//| |
//| |
//+------------------------------------------------------------------+
//--- input parameters
extern bool sell = 1; // разрешение продавать
extern bool buy = 1;
extern double lots = 0.1;
extern int sl = 50;
extern int tp = 150;

extern int order = 10; //

extern double bez = 15;
extern double tral_step = 15;
extern double tral_start = 10;

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
string sell_stop ="ss"; //линию называю вручную
string buy_stop ="bs";

//buy------------------------------------------------------------------------------------------------

// найти линию и выставить ордер при касании ценой
if (ObjectFind (buy_stop) > 0 ) //если есть линия buy_stop.
if ( ObjectGet (buy_stop, OBJPROP_PRICE1=Ask )// касание линии
{
OrderSend (Symbol(),OP_BUYSTOP, lots, Ask+Point*order,3, Bid-sl*Point, Bid+tp*Point );// отсылается ордер
ObjectDelete (buy_stop); // линия удаляется
}


return(0);
}
//+-------------------------

 
TESKATLIPOKA:

никто увы ошибку не заметил. потому еще раз

не подскажете ошибку в коде? спасибо.


Вот они (ошибок в Вашем коде гораздо больше, но эти не пройдут даже через компилятор):

if ( ObjectGet (buy_stop, OBJPROP_PRICE1=Ask )// касание линии
Причем, даже если изменить код на более вменяемый с точки зрения компилятора:

if ( ObjectGet (buy_stop, OBJPROP_PRICE1) == Ask )// касание линии

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

Правильнее будет искать условие пересечения так:

if (ObjectGet (buy_stop, OBJPROP_PRICE1) <= High[0]) && (ObjectGet (buy_stop, OBJPROP_PRICE1) >= Low[0]))//  на текущей свече касание линии уже имело место


P.S. В MetaTrader найти место с ошибкой после компиляции достаточно легко:

1. Во вкладке "Инструментарий" в графе "Файл" в круглых скобках указываются через запятую номер строки и номер символа в которых компилятор обнаружил ошибку.

2. Если в той же самой вкладке в графе "Описание" дважды кликнуть по сообщению об ошибке, то курсор в редакторе перескочит на то место, где компилятор обнаружил эту самую ошибку.

 
eugggy:
Ну так тема для новичков, и если б я был уверен, чему равен бар в момент удаления, то может и советник бы работал.
ну так и спрашивайте - как узнать чему равен bar.
Причина обращения: