[АРХИВ!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 4. - страница 218

 
Думал, что там нет косяка - пересмотрю ещё раз - спасибо.
 
Нет, про велосипеды не подходит. Мне нужно вносить коррекцию времени - разницу между часовыми поясами двух разных терминалов. Там счёт идёт на часы. Поищу глюк сам.
 
Aleksander:
в старте - вызвать функцию проверки наличия ордера бай по циклу ордеров Селлстоп... и его удаления - если ордера бай нет среди открытых ордеров...
Я что то не до понимаю, фразу" наличия ордера бай по циклу ордеров Селлстоп ".
 

ну смотри...

Цикл перебора установленных ордеров(начало)

берём ордер

- Если он Селлстоп то (запоминаем его магик номер - он же тикет ордера бай {

через

bool OrderSelect( int index, int select, int pool=MODE_TRADES)


проверяем Есть ли такой ордер... - это твой ордер бай...

если его нету - то тогда текущий ордер Селлстоп удаляем

}

}конец цикла перебора ордеров...

 
TheXpert:

InitsializeRealMasterOrders -- тут косяк ищи.

И вот еще -- чтобы велосипеды не делать -- https://docs.mql4.com/ru/convert/timetostr



Все равно глюк. В подпрограмме код считывает данные из строк текстового документа:

4;NZDUSD;98537467;1;0.5;1340809155;0;0.7881;0;0.7939;0;0
4;NZDUSD;98537450;1;0.5;1340809147;0;0.788;0;0.7939;0.787;0

Время открытия ордера - шестой параметр в строке. Он считывался в переемнную типа datetime командами:

Stroka=FileReadString(FileHandlе);// Время открытия
r_master_OpenTime[i]=StrToTime(Stroka);// Время открытия

В результате в переменной r_master_OpenTime[i] оказывалась Бог весть какая величина. Но как только я изменил её тип из datetime на int, стало всё впорядке. Более пяти лет уже программлю на mql4 и всё не перестаю удивляться... :)

 
Aleksander:

ну смотри...

Цикл перебора установленных ордеров(начало)

берём ордер

- Если он Селлстоп то (запоминаем его магик номер - он же тикет ордера бай {

через

bool OrderSelect( int index, int select, int pool=MODE_TRADES)


проверяем Есть ли такой ордер... - это твой ордер бай...

если его нету - то тогда текущий ордер Селлстоп удаляем

}

}конец цикла перебора ордеров...

Вот написал такую ерундистику

  int      i, k=OrdersTotal();
  
   for (i=0; i<k; i++)
 if(OrderType()==OP_SELLSTOP)
    if(OrderMagicNumber()==ticket)
 if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) 
  if(OrderType()==OP_BUY)return(-1); 
      else
        OrderDelete(OrderTicket());
Спасибо вроде работает))
 

drknn: Все равно глюк. В подпрограмме код считывает данные из строк текстового документа:

4;NZDUSD;98537467;1;0.5;1340809155;0;0.7881;0;0.7939;0;0
4;NZDUSD;98537450;1;0.5;1340809147;0;0.788;0;0.7939;0.787;0

Время открытия ордера - шестой параметр в строке. Он считывался в переемнную типа datetime командами:

Stroka=FileReadString(FileHandlе);// Время открытия
r_master_OpenTime[i]=StrToTime(Stroka);// Время открытия

В результате в переменной r_master_OpenTime[i] оказывалась Бог весть какая величина. Но как только я изменил её тип из datetime на int, стало всё впорядке. Более пяти лет уже программлю на mql4 и всё не перестаю удивляться... :)

Отсюда
datetime StrToTime(string value)
Преобразование строки, содержащей время и/или дату в формате "yyyy.mm.dd [hh:mi]", в число типа datetime (количество секунд, прошедших с 01.01.1970)
Формат входных данных не соответствует ожидаемому
 

Подскажите плз что сделать если:

Советник в тестере работает норм,все по плану, а на реалке не открывает сделки

P.S. Очн нужна помощь, вопрос жизни-смерти

 
Gek34:

Всем доброго времени суток.

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

код прилагаю:

int start()
{
int counted_bars=IndicatorCounted();
int i,n;
double Stark=0;
//----
i=Bars-counted_bars-1;//+50;
// n=Bars-counted_bars-1;
while(i>=0)
{
//----

double Ma=iMA(NULL,0,PerMa,Shift,MODE_EMA,PRICE_CLOSE,i);
//double Ma1=iMA(NULL,0,PerMa,Shift,MODE_EMA,PRICE_CLOSE,i+1);
if(Stark+Step*Point<Ma)Stark=Ma;
if(Stark-Step*Point>Ma)Stark=Ma;
ABuf[i]=Stark;

//----
i--;
}
return(0);
}


помогите исправить, чтобы он и дальше рисовал ступени.

Заранее благодарен.

Gek.

Приведите весь код индикатора
 
что не так for (f=1;f<Bars;f++)
{
Price1 = (iClose(Symbol_1,0,0) - iClose(Symbol_1,0,f)) / MarketInfo(Symbol_1, MODE_POINT);
Price2 = K*(iClose(Symbol_2,0,0) - iClose(Symbol_2,0,f)) / MarketInfo(Symbol_2, MODE_POINT);
Spread = Price1 - Price2;
Print ("Price1="+Price1, " Price2="+Price2);
if (Spread==0){t=f; break;}
}
Price12 = (iClose(Symbol_1,0,0) - iClose(Symbol_1,0,t)) / MarketInfo(Symbol_1, MODE_POINT);
Price22 = K*(iClose(Symbol_2,0,0) - iClose(Symbol_2,0,t)) / MarketInfo(Symbol_2, MODE_POINT);
Spread2 = Price12 - Price22;


if (MathAbs(Spread2) >= razdvizka && Spread2 < 0) { открывем сделку }


хочу зафиксировать бар, где раздвижка была равно нулю и от него контролировать раздвижку

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