Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 679

 
Artyom Trishkin:

Спасибо.

 
Добрый день! Очень прошу, помогите разобраться с вопросом по простейшему циклу .
Суть цикла заключается в том, что переменная I увеличивается на единицу.
Значение выводится через принт. 
Сам цикл: 

for (int i=0; i<100000;i++)
{
Print("I =",i);
if(i>3000)
{
Print("I =",i);
break;
}

Вопрос заключается в том, что если в условии if(i>3000) число стоит ориентировочно больше 100 (в моем случае три тысячи),
то принт выводит разные значения. Постоянно.
Я хочу сказать, что если цикл имеет вид
for (int i=0; i<100000;i++)
{
Print("I =",i);
if(i>100)
{
Print("I =",i);
break;
}

То в тестере Print показывает значение I = 0, потом 1,потом2,потом3,потом4,...и так до 100.
Но! Если условие к примеру  if(i>3000) , то Print показывает значение начиная... я даже не знаю как правильно сформулировать...
с радномного числа , например с 2895 и далее прибавляет по единице! 

Вот как это выглядет наглядно:

if i > 100

100


if i >3000

3000



В чем же заключается проблема? Я целый день бьюсь и не могу понять(((( Плиз Хелп!







 
eflaer:
В чем же заключается проблема? Я целый день бьюсь и не могу понять(((( Плиз Хелп!

откройте лог-файл, там полный отчет

 
Taras Slobodyanik:

откройте лог-файл, там полный отчет

Спасибо, открыл лог файл, действительно все отсчет начинается с ноля................ почему в журнале все не пишет? 

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

 
Просто каждый раз открывать лог файл, txt который весит 7+GB несподручно.......
 
eflaer:

Спасибо, открыл лог файл, действительно все отсчет начинается с ноля................ почему в журнале все не пишет? 

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

потому что вывод в лог и работа с графическими обьектами отнимает много ресурсов (времени), МТ оптимизирован к этому, и может часть лога "проглатывать", но выполнить быстро само тело скрипта

добавьте Sleep(120) после Print() 


eflaer:
Просто каждый раз открывать лог файл, txt который весит 7+GB несподручно.......

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

 
Спасибо огромное! Реально помогли! Буду продолжать искать ошибку...
 
Vitali Vakulin:
Здравствуйте. Прошу помощи у знающих.  Хочу сделать так что бы если просадка к примеру 10% то советник не будет открывать новых ордеров, доведёт открытые до ТП и все, открываются только усредняющие. Это поможет не уходить в большую просадку если торговля ведётся на нескольких парах. Работу функции понимаю, воплотить бы. 

Ребят, помогите пожалуйста

 

Добрый вечер.

Первые попытки написать советник. Подскажите, пожалуйста, почему советник открывает только Buy? Где ошибка?

extern double volume     = 0.05;   // Volume
extern int    stopLoss   = 1;      // StopLoss
extern int    takeProfit = 3;      // TakeProfit
extern int    slippage  = 10;          // Slippage
extern int    Period_bars  = 100;    // Period
extern int    magic      = 321;    // Magic
extern int    ATR_Period = 50;      // ATR Period

datetime newCandle;
double ABS_High=0;
double ABS_Low=1000000;

int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+

void OnDeinit(const int reason)
  {
//---
 

  }

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+

void OnTick()
  {

        double TD_Close=Close[1];

        double ATR=iATR(Symbol(),Period(),ATR_Period,0);

        double bsl=NormalizeDouble(Ask-(stopLoss*ATR),_Digits);

        double btp=NormalizeDouble(Ask+(takeProfit*ATR),_Digits); 

        double ssl=NormalizeDouble(Bid+(stopLoss*ATR),_Digits);

        double stp=NormalizeDouble(Bid-(takeProfit*ATR),_Digits); 

        for (int i=2; i<=Period_bars; i++)
        {
                if (Period_bars<=Bars-1)
                {
                        if (ABS_High<High[i]) ABS_High=High[i];
                        if (ABS_Low>Low[i]) ABS_Low=Low[i];
                }

                break;
        }

        if (TD_Close>ABS_High)
        {
                if (OrdersTotal () < 1 && newCandle != Time[0]) int tiket=OrderSend(Symbol(),OP_BUY,volume,Ask,slippage,bsl,btp,"Система пробоя открыла ордер BUY ",magic,0);

                else newCandle = Time[0];
        }
        else
        if (TD_Close<ABS_Low)
        {
                if (OrdersTotal () < 1 && newCandle != Time[0]) int tiket=OrderSend(Symbol(),OP_SELL,volume,Bid,slippage,ssl,stp,"Система пробоя открыла ордер SELL ",magic,0);
                else newCandle = Time[0];
        }
}

 
Andrey.Sabitov:

Добрый вечер.

Первые попытки написать советник. Подскажите, пожалуйста, почему советник открывает только Buy? Где ошибка?



Вставляйте (в) код поаккуратнее :-)

кроме форматирования, не видать где меняется ABS_High, он похоже константа 0 и условие TD_Close>ABS_High всегда верно

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