Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 827

 
Veterros:

В последней строке, скобок много. Может пустые убрать попробуйте.
Много скобок не бывает, главное - чтобы открывающих и закрывающих было поровну
 
alexeymosc:

Здравствуйте! Не пойму, почему выходит ошибка при объявлении массива вне функций.

 Ошибка: '[' - invalid index value 

 Как объявить двумерный не динамический массив, в качестве индексов переменные? 

 

Пробовал вместо static задать const. Пробовал также [][]. Все равно ошибка ( 

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

Потому, что несмотря на последовательность присвоения значений переменным, они остаются не инициализированными до запуска программы. Тоесть пока не запустится int Oninit() переменная которую ты используешь в качестве размерности массива не инициализирована. Перенеси эту строку в  Oninit() и всё должно работать...
 

У меня простейший код не открывает ордера.

В журнале пишет:    '1419717': order buy 0.01 EURUSD opening at market sl: 1.13720 tp: 1.13842 failed [Invalid S/L or T/P]

Здесь (на форуме) дали подсказку: "Стопы и Тейки нормализовать нужно!"

Не понимаю, что означает эта фраза?

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

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

Заранее спасибо. 

double Lots=0.01;
double TakeProfit=100;
double StopLoss=10;
int tk=0;

void start()
{
   if (OrdersTotal()==0)
      {
         tk=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-StopLoss*Point,Ask+TakeProfit*Point,0,0,0,Green);
         if(tk<0) 
         {
            Print("OrderSend завершилась с ошибкой #",GetLastError());
         }
         else         
         {
            Print("Функция OrderSend успешно выполнена");
         }
      }
}
 
AlexeyVik:
Потому, что несмотря на последовательность присвоения значений переменным, они остаются не инициализированными до запуска программы. Тоесть пока не запустится int Oninit() переменная которую ты используешь в качестве размерности массива не инициализирована. Перенеси эту строку в  Oninit() и всё должно работать...

AlexeyVik, Спасибо!

 

Я так и сделаю. Про Oninit не думал, но наверное так и есть. 

 

Подскажите, плиз )))

На графике присутствует какое-то количество графических объектов.

Закончил формироваться новый бар. Как проще всего определить не коснулся ли он какого-нибудь графического объекта ?

(Что то не хочется перебирать цены всех объектов и сравнивать а нету ли диапазона цен последнего бара в каком нибудь их них) 

То есть есть какой-то диапазон цен и времени как определить, есть ли в этих координатах какой-нибудь графический объект. 

 
favidu:

У меня простейший код не открывает ордера.

В журнале пишет:    '1419717': order buy 0.01 EURUSD opening at market sl: 1.13720 tp: 1.13842 failed [Invalid S/L or T/P]

Здесь (на форуме) дали подсказку: "Стопы и Тейки нормализовать нужно!"

Не понимаю, что означает эта фраза?

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

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

Заранее спасибо. 

NormalizeDouble() копайте в справочнике. Но если брокер не даёт выставлять стопы во время открытия рыночного ордера, то их надо вписать нулями и выставлять отдельно, вторым этапом. В кодобазе примеры есть.


tk=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,NormalizeDouble(Bid-StopLoss*Point,_Digits),NormalizeDouble(Ask+TakeProfit*Point,_Digits),0,0,0,Green);
 
evillive:

NormalizeDouble() копайте в справочнике. Но если брокер не даёт выставлять стопы во время открытия рыночного ордера, то их надо вписать нулями и выставлять отдельно, вторым этапом. В кодобазе примеры есть.


Большое спасибо.
 

Ребят толкните в нужную сторону...

К примеру:

#property strict
#property indicator_chart_window
#property indicator_buffers             0

int init() {

        return(0);
}

int start() {
        if (!GlobalVariableCheck(StringConcatenate("ID_", Symbol()))) {
                long id = ChartID();
                Print (id);
                GlobalVariableSet(StringConcatenate("ID_", Symbol()), id);
        }
        return(0);
}

Сохраняет всегда не то что принтит..

Как то так:

результат

ЧЯДНТ?

 
Ну вот, стоило только запостить, сразу сервер в 404 отправился =)
 

Временно записал старшие разряды отдельно младшие отдельно.

Похоже что в глобальную переменную типа double не помещается long.

Хотя здесь описывается что проблем не должно быть за исключением ситуаций когда "если целое больше 9223372036854774784 или меньше -9223372036854774784".

Но ведь согласитесь, ID чарта = 130659893770676840 меньше 9223372036854774784 на целый разряд как минимум.


P.S. Если кто-то сможет объяснить мою ошибку или это глюк, заранее благодарен. Буду заглядывать сюда.

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