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

 
Elenn:


Любые переменные при выходе из программы (перезагрузке компа и т.д.) теряются. Кроме глобальных переменных, т.к. они хранятся на жестком диске. Но они могут быть только типа double. Как быть, если необходимо хранить переменные других типов (int или string например)? Что тут непонятного?

Тип переменной.

Т.е. Г.П. могут быть только действительными числами. Так же внутри программы можно объявить любые глобальные переменные для данной программы программы, здесь написано

 

Приветствую гуру MQL !

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

условие - закрывать разом несколько позиций, открытых в одну сторону по условию (у меня например после пересечения ценой МА )

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

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

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

Вот как пробовал, теперь вообще не закрывает.


//+------------------------------------------------------------------+
//| Check for close order Buy |
//+------------------------------------------------------------------+
void CheckForClosebuy()
{
double maclosebuy;
//---- go trading only for first tiks of new bar
if(Volume[0]>1) return;
//---- get Moving Average
maclosebuy=iMA(NULL,TF,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);
//----
for(int i=0;i<OrderMagicNumber()==MAGIC;i++)
{
while (i>0)
{

if (Open[1]>maclosebuy && Close[1]<maclosebuy)
OrderClose(OrderTicket(),OrderLots(),Bid,3,Aqua);
continue;
}
}
return(0);
}

 
Elenn:

"Не жалуюсь" является как бы не совсем математическим понятием.

А написано вот здесь:


Есть глобальные переменные клиентского терминала, они double - https://book.mql4.com/ru/variables/globals они для обмена между советниками

а есть просто глобальные переменные, они могут быть любого типа https://book.mql4.com/ru/variables/types они в пределах одного советника

у Вас в чем задача состоит?

 

Добрый вечер! Я тут в тупике полном-полном. Вожусь с кодом, каторый должен открывать два ордера, байстоп и селлстоп, и все. Вроде, не очень уж мудреный код, все вроде панятно, а он открывает пять ордеров, и все тут!! Я в працесе отладки напхал его алертами, кароче выяснилась абсолютна потрисающая вещ, он сперва открывает два бая (2011.06.04 20:20:48 2011.02.10 19:00 для лавин EURUSD,H1: Alert: OrderType( )0) Не может, не может такого быть!!!!!! Ну нечем ему их открывать!! Нечем!!!!!

В нем вписан оррдерсенд только в вариантах OP_BUYSTOP и OP_SELLSTOP. И на расстоя-ниях 20пп вверх-вниз.

Комп глючит?

Цитирую // 0 – OP_BUY покупка
1 – OP_SELL продажа
2 – OP_BUYLIMIT отложенный Buy Limit
3 – OP_SELLLIMIT отложенный Sell Limit
4 – OP_BUYSTOP отложенный Buy Stop
5 – OP_SELLSTOP отложенный Sell Stop

Других значений быть не может.


//

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

//+------------------------------------------------------------------+
//|                                                   ля лавин б.mq4 |
//|                      Copyright © 2011, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
extern double stoploss=0; extern double takeprofit=20;extern int otstup=20; extern datetime expiration=0;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
  
  
  
  int tiket,tikett;double volume=0.1;int i=0,R1=0,R2=0,A=1 ;double price; int stsBUY;int stsSELL;double Price;int C=0;
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
int X,Y; double price=(Ask+Bid)/2;            

       Alert ("OrdersTotal()",OrdersTotal());
       
       if(C==0){ Price = price ;  C=1;}


 for(int i=OrdersTotal();i>0;i--){Alert ("i", i);Alert ("OrderType( )", OrderType( ));OrderSelect(i,SELECT_BY_POS );if(OrderSymbol()==Symbol()&&OrderMagicNumber( )==1000){
if(OrderType( )==OP_BUYSTOP){X++;Alert ("X-v tsikle", X);}}}Alert ("X", X);
if (X==0){Alert ("Price", Price);Alert ("Price +otstup*Point",Price +otstup*Point);Alert ("Price+takeprofit*Point+otstup*Point", Price+takeprofit*Point+otstup*Point);


   tiket= OrderSend( Symbol(), OP_BUYSTOP,  volume*A, Price +otstup*Point, Point* 3, R1, Price+takeprofit*Point+otstup*Point, "OP_BUYSTOP", 1000,  expiration, Red); 
   Alert ("OP_BUYSTOP", GetLastError( )); }
   

 for ( i=OrdersTotal();i>0;i--){Alert ("i", i);Alert ("OrderType( )", OrderType( )); OrderSelect(i,SELECT_BY_POS );if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()) { 
if(OrderType( ) ==OP_SELLSTOP) { Y++;Alert ("Y-v tsikle", Y);}}}Alert ("Y", Y);
 if (Y==0){ 
 
 
   tikett= OrderSend( Symbol(), OP_SELLSTOP,  volume*A, Price -otstup*Point, Point* 3,R2, Price-takeprofit*Point-otstup*Point, "OP_SELLSTOP" , 2000,  expiration,C'0,128,255' );
    Alert ("OP_SELLSTOP", GetLastError( )); 
    } 
   
//----
   return(0);
  }
//+------------------------------------------------------------------+

Я просто не знаю, что и думат.

 

Переменные X b Y число ордеров байстоп и селлстоп.

В журнале вы видите, что сначала срабатывает, ордесенд, выставляя байстоп, и ошибки нет. Дальше вдруг аказываеца, что при праверке ордертипе у нас ордер бай, чифровая константа катораго ноль!! И т.п.

Может функцию ордерсенд глючит?

И толька лиш дальше, паявляюца ордера 5 и 4 !!


 
Dimka-novitsek:

Добрый вечер! Я тут в тупике полном-полном.

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

 for(int i=OrdersTotal();i>0;i--)

на

 for(int i=OrdersTotal()-1;i>=0;i--)
 
Snaf:


у Вас в чем задача состоит?

Моя задача состоит в том, чтобы была возможность хранить данные разных типов с возможностью быстрого доступа к ним. Через файлы думаю, что будет долго. Через глобальные переменные может быть быстро, но сохранять в них можно только тип double. Вот и думаю, как быть.
 
Elenn:
Моя задача состоит в том, чтобы была возможность хранить данные разных типов с возможностью быстрого доступа к ним. Через файлы думаю, что будет долго. Через глобальные переменные может быть быстро, но сохранять в них можно только тип double. Вот и думаю, как быть.
через файл не долго.. Достаточно быстро. Есть еще вариант. Можно хранить данные в графических объектах. Имена заранее записываются, и можно целые и дробные типы хранить в значениях, дату в координатах даты. Тип string в описании объекта..
 
Храните данные в объектах. Легко и быстро можно поднять. Легко искать. Легко делать перебор. Удобно.
 
Porter:
Храните данные в объектах. Легко и быстро можно поднять. Легко искать. Легко делать перебор. Удобно.

А как происходит хранение объектов и что будет с объектами при аварийном отключении компа?
Причина обращения: