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

 
wolfovik:

Помогите решить проблему!

Советник в тестере зависает при использовании функции ICustom. Есть способы решения проблемы?

А еще в тестере постоянно ошибка PB Trade EURUSD,H1: OrderSend error 130

Хотя стопы на уровне 300 пунктов!

ticket = OrderSend(Symbol(),OP_BUY,0.1,Ask,5,Bid-300*Point,Bid+300*Point);

Даже так не работает

RefreshRates();
ticket = OrderSend(Symbol(),OP_BUY,0.1,Ask,5,Bid-300*Point,Bid+300*Point);

Где я свернул не туда?


 
Dmitry01110:
Здравствуйте! Подскажите, пожалуйста, как редактировать файл, созданный функцией FileOpen, например, удалить байт из текущей позиции и вставить другой вместо него!


Тоже пытаюсь сделать нечто подобное.

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

Есть возможность подготовить *.csv файл с двумя колонками - [ЦИФРА]; [ЗНАЧОК], и как раз значок советник и будет редактировать.

 
wolfovik:

А еще в тестере постоянно ошибка PB Trade EURUSD,H1: OrderSend error 130

Хотя стопы на уровне 300 пунктов!

Даже так не работает

Где я свернул не туда?


Рассчитываемые цены в торговом приказе нужно нормализовывать до Digits:

ticket = OrderSend(Symbol(),OP_BUY,0.1,Ask,5,NormalizeDouble(Bid-300*Point,Digits),NormalizeDouble(Bid+300*Point,Digits));

Ещё нужно проверять значения стоп-приказов на допустимость требованиям StopLevel:

input int  StopLoss    =  300;   // Значение Stop Loss в пунктах
input int  TakeProfit  =  300;   // Значение Take Profit в пунктах
int   level=0, spread=0;
//+------------------------------------------------------------------+
//|   Старт                                                          |
//+------------------------------------------------------------------+
void OnTick() {
   level=MarketInfo(Symbol(),MODE_STOPLEVEL);
   spread=MarketInfo(Symbol(),MODE_SPREAD);
   if(level==0) level=spread*2;
//---
   int    ticket=0;
   double sl=0, tp=0;
   if(StopLoss>0) sl=NormalizeDouble(MathMin(Bid-StopLoss*Point,Bid-(level+1)*Point),Digits);
   if(TakeProfit>0) tp=NormalizeDouble(MathMax(Bid+TakeProfit*Point,Bid+(level+1)*Point),Digits);
   ticket = OrderSend(Symbol(),OP_BUY,0.1,Ask,5,sl,tp);
   return;
}

Для Buy примерно так...

 
Dmitry01110:
Здравствуйте! Подскажите, пожалуйста, как редактировать файл, созданный функцией FileOpen, например, удалить байт из текущей позиции и вставить другой вместо него!
Вызываешь в строковую переменную весь текст файла, редактируешь как простую переменную, затем вызываешь этот файл только на запись и возвращаешь эту перемнную взад.
 
Roger:
Вызываешь в строковую переменную весь текст файла, редактируешь как простую переменную, затем вызываешь этот файл только на запись и возвращаешь эту перемнную взад.

А если количество символов в файле превышает максимальный размер символов в строковой переменной?
 
Немного разобрался! Чтобы заменить значение в какой-то позиции файла, нужно просто поставить указатель на предыдущий байт при помощи FileSeek, а затем, при помощи FileWriteInteger, например, вписать туда новое значение, которое затрет старое. Главное чтобы старые и новые значения были одного размера, например, LONG_VALUE для int.
 
Сегодня обновили мне терминал. Теперь не видит индикаторы... Что делать и правильно ли я положил. В ту папку(путь), что и до этого.
 

for(int l = StringLen(tfs)-1; l >= 0; l--) { int char = StringGetChar(tfs,l); }

Ошибки в коде. Почему ругается на "char"? Как и чем можно заменить?

 
artmedia70:
А если количество символов в файле превышает максимальный размер символов в строковой переменной?

Нет у строковой переменной ограничения. Вернее, есть, но оно очень большое. Для МТ4 от 529 билда это 2147483647 символов и в 2 раза меньше, если МТ4 в 32-х разрядной ОС. И то не всегда. Там разные ключи и PAE...

Dmitry01110:
Немного разобрался! Чтобы заменить значение в какой-то позиции файла, нужно просто поставить указатель на предыдущий байт при помощи FileSeek, а затем, при помощи FileWriteInteger, например, вписать туда новое значение, которое затрет старое. Главное чтобы старые и новые значения были одного размера, например, LONG_VALUE для int.
Да, а для CSV должно совпадать количество символов.

Zolotai:

for(int l = StringLen(tfs)-1; l >= 0; l--) { int nChar = StringGetChar(tfs,l); }

Ошибки в коде. Почему ругается на "char"? Как и чем можно заменить?

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