MetaTrader 4 Client Terminal build 610 - страница 27

 
Vladon:


да но после смены ТФ советник начал трогать не свои ордера

! а это исключено, советника послал на экспертизу через СД

Там везде явно стоит только ордера текущей валютной пары.

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

Вот эта что ли функция?

bool ModifyTPALL(string sy="",int op=-1,int mn=-1,double TP=0)
  {
   int i,k=OrdersTotal(),ty;
   string Autor=" Автор функции для шаблона : www.expforex.com";

   if(sy=="0") sy=Symbol();
   for(i=0;i<k;i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         ty=OrderType();
         if(ty<2)
           {
            if((OrderSymbol()==sy || sy=="") && (op<0 || ty==op))
              {
               if(mn<0 || OrderMagicNumber()==mn || OrderMagicNumber()==Magic)
                 {
                  ModifyOrder(-1,-1,TP);
                 }
              }
           }
        }
     }
   return(False);
  }

У параметра sy выставлено умолчательное значение "". То есть очень велика вероятность, что именно это значение и попадёт в функцию.

Уберите использование умолчательных параметров. Уберите все вызовы функции ModifyTPALL(), которые без параметров.

В противном случае проверка sy=="" будет проходить всегда и наплюёт на текущий символ

 
stringo:

Вот эта что ли функция?

У параметра sy выставлено умолчательное значение "". То есть очень велика вероятность, что именно это значение и попадёт в функцию.

Уберите использование умолчательных параметров. Уберите все вызовы функции ModifyTPALL(), которые без параметров.

В противном случае проверка sy=="" будет проходить всегда и наплюёт на текущий символ


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

и что самое интересное - вычислен правильно по данной паре, а модифицирует чужие ордера.


а почему ? ведь данный код везде во всех экспертах ?

Это просто КРАХ...

после перегрузки терминала все стало ок - советник снова работает нормально не трогая другие символы.

........................

Инициализация всегда была и есть на всех параметрах.

получается и в справке нужно менять

int somefunc(double a,
             double d=0.0001,
             int n=5,
             bool b=true,
             string s="passed string")
  {
   Print("Обязательный параметр a= ",a);
   Print("Переданы следующие параметры: d = ",d," n = ",n," b = ",b," s = ",s);
   return(0);
  }
 

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

все как положено всегда делал.

Если какому-либо параметру было назначено умолчательное значение, то все последующие параметры также должны иметь умолчательное значение.

Пример неправильного объявления:

int somefunc(double a,
double d=0.0001, // объявлено значение по умолчанию 0.0001
int n, // значение по умолчанию не указано !
bool b, // значение по умолчанию не указано !
string s="passed string")
{
}


Суть проблемы в том что я передаю в функцию название Символа!

но в функции она в какой то момент начинает передаваться неправильно.

Пока запустил советника с принтами - ошибок нет - смотрю дальше.

а возможно проблема не в символе а в выборе ордера?

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

 
artmedia70:
По-умолчанию sy="", сравниваете sy=="0", проверяете sy==""
Эти сравнения я уже где-то видел (и переменные в 2 буквы), и точно знаю где... :)))
 
TarasBY:
Эти сравнения я уже где-то видел (и переменные в 2 буквы), и точно знаю где... :)))


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

 
так.... а кто подскажет как же получить заветные 90% тестирования? почему история такая короткая по м1?
 

Может-ли кто сказать, свойство IndicatorSetInteger(INDICATOR_LEVELCOLOR, level, colors); работает-ли в mql4 ?

Я попытался назначить цвет уровням, но не получилось. Тогда я скопировал полный текст из справки https://docs.mql4.com/ru/customind/indicatorsetinteger откомпилировал и ничего не получается. Стиль и толщина уровней меняется, а цвет остаётся неизменным.

 
посмотри на SetIndexStyle
 

Подскажите, пожалуйста, где ошибка.

В скрипте, запускаемом из подпапки Skripts\\Stochastic, есть следующие операторы:

file_name="Cross-Revers.Support."+hist_name+"."+valuta+"."+string(TF)+".csv";
myFile="Test\\"+file_name;//файл результатов тестирования

handle=FileOpen(myFile, FILE_CSV|FILE_READ|FILE_WRITE, ';');

По моему разумению, файл с именем file_name должен открыться в поддиректории File\\Test

На деле же в папке Test создается папка Cross-Revers.Support.Stochastic и в нее записывается файл с именем hist_name+"."+valuta+"."+string(TF)+".csv"

В чем проблема?

 
TarasBY:
Эти сравнения я уже где-то видел (и переменные в 2 буквы), и точно знаю где... :)))
Так он же Кима функции пользует. Плохо только, что везде пишет, что они его. Да пёссними...
Причина обращения: