Помогите блин, просто не знаю почему ((((((

 

Здравствуйте. Вот написал свой первый многовалютник. Только вот проблема в следующем. У меня два ноута, первый рабочий с XP а второй с Vista. Советник простой, на пересечении МА. Так вот странная штука получается на одном к примеру на Первом с ХР сигналит 5 пар, а на втором 3 пары всего. Из 8 пар к примеру 2 совподают остальные нет (((( И каждый раз ошибка выскакивает на Viste - uninit reason 3 (Это я понимаю МТ4 вырубает советник при переключении таймфреймов). На ХР, хотя я также переключаю таймфреймы ничего подобного нет, все нормально работает. Вот исходный код, помогите пожалуйста. Спасибо.

 

Сделай распринтовку в лог и оттуда сравнивай. Очень тяжело разбираться в твоем недружелюбно представленном коде.

 
Roger >>:

Сделай распринтовку в лог и оттуда сравнивай. Очень тяжело разбираться в твоем недружелюбно представленном коде.

Кнопка SRS для вставки кода вверху окна, если Вы не поняли.

 
granit77 >>:

Кнопка SRS для вставки кода вверху окна, если Вы не поняли.

#include <WinUser32.mqh> //Значение для переменных MB_OK|MB_ICONEXCLAMATION

//Параметры MA
extern double MAp =7; // MA период
extern double MAs =0; // MA смещение
extern double MAm =0; // МА метод


void PG(string ParaValut)
{
int Часы = Hour();
int Минуты = Minute();

//Параметры Мoving Average
double MA;

//Определяем данные по Moving Average
Tek_Price_Open = iOpen(ParaValut,PERIOD_H1,1);
Tek_Price_Close = iClose(ParaValut,PERIOD_H1,1);
MA = iMA(ParaValut,PERIOD_H1,MAp,MAs,MAm,PRICE_CLOSE,1); // Задаем МА и параметры

if (MA < Tek_Price_Close)
{
if ((Часы < 20) && (Часы > 4)) //Так разница с сервером в 2 часа
{
//int yy=5;
//CreateTextLable("l1","Игра: "+ParaValut,10,"FixedSys",Black,1,10,yy);
//CreateTextLable("l2","comment2="+comment2,10,"FixedSys",Lime,1,10,yy+15*1);

Print("Возможная игра. Время: "+TimeToStr(TimeCurrent())+", Пара: "+ParaValut);
PlaySound("сoindrop.wav");
int ret_1=MessageBox("Вероятность игры по 1Н: "+ParaValut, "Возможная ПАРА для игры 1Н",MB_OK|MB_ICONEXCLAMATION);
}
}


if (MA > Tek_Price_Open)
{
if ((Часы < 20) && (Часы > 4)) //Так разница с сервером в 2 часа
{
Print("Возможная игра. Время: "+TimeToStr(TimeCurrent())+", Пара: "+ParaValut);
PlaySound("сoindrop.wav");
int ret_2=MessageBox("Вероятность игры по 1Н: "+ParaValut, "Возможная ПАРА для игры 1Н", MB_OK|MB_ICONEXCLAMATION);
}
}

//Параметры ручного закрытия ордера
string Simvol_Ordera;
int Total_Orders = OrdersTotal(); //всего ордеров
int Order_Type; // тип ордера
//int Ticket; // будем записывать сюда номер тикета
for(int i_=Total_Orders-1; i_>=0; i_--)
{
if (OrderSelect(i_,SELECT_BY_POS))
{
Order_Type=OrderType();
//Ticket=OrderTicket();
Simvol_Ordera = OrderSymbol();
switch(Order_Type)
{
case 0:
// Ордер на покупку
if (Simvol_Ordera == ParaValut)
{
if (OrderProfit()<=-30)
{
Print("Возможно УБЫТОК. Время: "+TimeToStr(TimeCurrent())+", Пара: "+ParaValut);
PlaySound("alert2.wav");
PlaySound("alert2.wav");
PlaySound("alert2.wav");
PlaySound("alert2.wav");
PlaySound("alert2.wav");
int ret_3=MessageBox("Вероятно убыточная ПАРА 1Н: "+ParaValut, "Возможно убыточная ПАРА 1Н", MB_OK|MB_ICONEXCLAMATION);
}
}

//Параметр ручного закрытия ордера
break;// выход из блока switch
case 1:
// Ордер на продажу
if (Simvol_Ordera == ParaValut)
{
if (OrderProfit()<=-30)
{
Print("Возможно УБЫТОК. Время: "+TimeToStr(TimeCurrent())+", Пара: "+ParaValut);
PlaySound("alert2.wav");
PlaySound("alert2.wav");
PlaySound("alert2.wav");
PlaySound("alert2.wav");
PlaySound("alert2.wav");
int ret_4=MessageBox("Вероятно убыточная ПАРА 1Н: "+ParaValut, "Возможно убыточная ПАРА 1Н", MB_OK|MB_ICONEXCLAMATION);
}
}
break;// выход из блока switch
default:
break;// выход из блока switch
}
}
}
}

//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start()
{

static datetime New_Time=0; // Время текущего бара
New_Bar=false; // Нового бара нет
if(New_Time!=Time[0]) // Сравниваем время
{
New_Time=Time[0]; // Теперь время такое
New_Bar=true; // Поймался новый бар

string Para="";
for( int Kolich_Valut=1; Kolich_Valut<64; Kolich_Valut++)
{
switch(Kolich_Valut)
{
case 1: Para="AUDCAD"; if(New_Bar==true){PG(Para);}break;
case 2: Para="AUDCHF"; if(New_Bar==true){PG(Para);}break;
case 3: Para="AUDJPY"; if(New_Bar==true){PG(Para);}break;
case 4: Para="AUDNZD"; if(New_Bar==true){PG(Para);}break;
case 5: Para="AUDSGD"; if(New_Bar==true){PG(Para);}break;
case 6: Para="AUDUSD"; if(New_Bar==true){PG(Para);}break;
case 7: Para="CADCHF"; if(New_Bar==true){PG(Para);}break;
case 8: Para="CADJPY"; if(New_Bar==true){PG(Para);}break;
case 9: Para="CHFJPY"; if(New_Bar==true){PG(Para);}break;
case 10: Para="CHFSGD"; if(New_Bar==true){РG(Para);}break;
case 11: Para="EURAUD"; if(New_Bar==true){PG(Para);}break;
....
case 63: Para="_QM"; if(New_Bar==true){PG(Para);}break;

return; // Выход из start()
}
}
}
}
//+------------------------------------------------------------------+


ну вроде вот. вставил.
а может быть так что показатели разнятся из-за того что, я в МТ4 пары в виде окон не создал. 
а то у меня на одном 4 пары загружено, на втором компе 10. Может из-за этого?
 
Нужно отслеживать новый бар для каждого инструмента. Создайте массивы New_Bar[63], New_Time[63] и вместо Time[0] используйте iTime(Para,0,0)
 
rabanik писал(а) >>

а может быть так что показатели разнятся из-за того что, я в МТ4 пары в виде окон не создал.
а то у меня на одном 4 пары загружено, на втором компе 10. Может из-за этого?

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

 
Roger >>:

а может быть так что показатели разнятся из-за того что, я в МТ4 пары в виде окон не создал.
а то у меня на одном 4 пары загружено, на втором компе 10. Может из-за этого?

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

Знаете что я заметил (у меня один и тот же советник выдает разное количество сигналов на двух компах) - К примеру у меня на одном компе выдает сигнал на покупку по EURUSD, а по второму сигнала нет. Что я сделал, я просто через F2 подгрузил архив котировок и сигнал на втором ноуте появился. Вывод - данные которые сформировали сигнал не подгрузились.

По вашему посту я понял мне просто следует загрузить окно "Обзор рынка" и данные сами подгрузяться? А какими либо другими программными средствами обновлять

данные можно? Т.е. типа

RefreshRates( )

?


Только что нашел на форуме https://forum.mql4.com/ru/14468 ))))) Тут человек выдвинул код, я его не совсем понимаю честно)))) Как на ваше усмотрение ЭТО ОТВЕТ НА ВОПРОС?

 	
ExpertTrader 05.08.2008 10:29 

Возникла проблема.

Эксперту необходимы данные из другого инструмента на другом периоде. Как обновить историю на нужном графике?

Вот этот код:

if(iBars(symb,PERIOD_D1)<33 || iBars(symb,PERIOD_H4)<33 || iBars(symb,PERIOD_H1)<33 || iBars(symb,PERIOD_M30)<33 || iBars(symb,PERIOD_M15)<33 || iBars(symb,PERIOD_M5)<33)
   {
      if(iClose (symb,PERIOD_D1 ,33)<=iClose (symb,PERIOD_D1 ,17) ||
      iClose (symb,PERIOD_H4 ,33)>=iClose (symb,PERIOD_H4 ,17) ||
      iClose (symb,PERIOD_H1 ,33)<=iClose (symb,PERIOD_H1 ,17) || 
      iClose (symb,PERIOD_M30 ,33)>=iClose (symb,PERIOD_M30 ,17) || 
      iClose (symb,PERIOD_M15 ,33)<=iClose (symb,PERIOD_M15 ,17) || 
      iClose (symb,PERIOD_M5 ,33)>=iClose (symb,PERIOD_M5 ,17))
         {
            Print("Производится загрузка данных для ",symb,". Подождите пожалуйста.");

            Sleep(60000);
            return(0);
         }
   }
 

Давайте сразу определимся, Вы говорите о работе вживую или в тестере?

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

Оператор RefreshRates() нужен для того, чтобы обновить данные, если Вы находитесь внутри цикла и долго не выходили из него. Если Вы работаете по тику, все данные обновятся автоматически.

 
Я, говорю о работе на Демо счете.
 

Ну, тогда все эти танцы с бубном тебе ни к чему. Или ты хочешь сказать, что ты опрашиваешь цену, типа:

iClose (symb,PERIOD_D1 ,33), а тебе нет правильной цены?

 
Roger >>:

Ну, тогда все эти танцы с бубном тебе ни к чему. Или ты хочешь сказать, что ты опрашиваешь цену, типа:

iClose (symb,PERIOD_D1 ,33), а тебе нет правильной цены?

Да, верно. Еще заметил, к примеру: Если несколько графиков, то при переходе с одного на другой, идет подкачка данных - т.е. появляются новые бары. Тоже самое происходит при выборе на одном графике разных временных интервалов. (Может я в неправильном направлении ищу? - Но факт того что на одном компе выдает сигнал на покупку по EURUSD, а по второму сигнала НЕТ. После F2 подгрузки архива котировок по EURUSD сигнал на втором ноуте появился.