Ваши вопросы по языку MQL4

Nata_FX

Активный участник
Подскажите пожалуйста, почему при копирование кода из Notepad++ в редактор metaeditorа кирилица исчезает и проявляется в виде знаков" ????..."( и это при том, что код брал с редактора МТ4, где кирилица присутствовала), такое же происходило, если копировал функцию с форума в редактор метаэдитора, Есть ли решение этой проблеммы и как её можно устранить.

Попробуй переключиться на русскую кодировку в блокноте и в метаэдиторе, а потом уже копировать код через буфер обмена
 

ale002

::: __,,,^._.^,,,__ :::
Попробуй переключиться на русскую кодировку в блокноте и в метаэдиторе, а потом уже копировать код через буфер обмена

Когда курсор становится в конец куска текста, который копируем, винда автоматом переключает раскладку в латиницу, если в этом месте английские буковки. Поэтому лучше добавить в начало и/или конец пару слов на чистарусском :)
 

sochinik

Местный житель
Попробуй переключиться на русскую кодировку в блокноте и в метаэдиторе, а потом уже копировать код через буфер обмена

Если копирую вначале в ворд, а затем в метадиэтитор, то кирилица показывается нормально, если напрямую с Notepad++ в редактор metaeditorа , то проявляются только вопросительные знаки, самое главное, что с копирую с метаэдитора в Notepad++ искажений не происходит, но есть ещё вопрос что иногда скачанные файлы меняют название на "Советник Р*етиколо"
 

sochinik

Местный житель
Вы случайно "привет" из сети не поймали (я имею ввиду вирус)? Очень похоже на него.

Да нет по моему такое происходит и на ноутбуке , и такие преобразования не всегда, а только в некоторых случаях- это что то за проблемы с кодировкой как я понимаю- вот и хотел бы у специалистов узнать что где сменить или какой шрифт добавить
 

sochinik

Местный житель
В Notepad++ меню -> Кодировки, поиграйся вариантами
Уже пробовал, но наверное придётся всётаки применять копирование через ворд, или же приспосабливаться работать только в редакторе медаэдиторе, но в Notepad++ очень удобно разбирать коды и производить замену в коде... Может есть ещё подобные прогрымы для помощи в написании экспертов...?
 

NSerega

Администратор
Да нет по моему такое происходит и на ноутбуке , и такие преобразования не всегда, а только в некоторых случаях- это что то за проблемы с кодировкой как я понимаю- вот и хотел бы у специалистов узнать что где сменить или какой шрифт добавить

Вы говорите, что такое преобразование происходит не всегда. На ваш вопрос уже ответила Nata FX выше. Только что перепроверил несколько раз. Все дело в раскладке клавиатуры. Если вы скопировали код из метаэдитора и вставили его в блокнот++, а расладка клавиатуры при вставке кода в блокнот была английская, то при обратном копировании из блокнота в метаэдитор вместо русских букв будут вопросы. Надо чтобы при вставке в блокнот раскладка клавиатуры была русская, тогда и при обратном копировании все будет нормально.
 

sochinik

Местный житель
Вы говорите, что такое преобразование происходит не всегда. На ваш вопрос уже ответила Nata FX выше. Только что перепроверил несколько раз. Все дело в раскладке клавиатуры. Если вы скопировали код из метаэдитора и вставили его в блокнот++, а расладка клавиатуры при вставке кода в блокнот была английская, то при обратном копировании из блокнота в метаэдитор вместо русских букв будут вопросы. Надо чтобы при вставке в блокнот раскладка клавиатуры была русская, тогда и при обратном копировании все будет нормально.

Спасибо, всё получилось сейчас проверил,а то уже начал знакомиться с Microsoft Visual C++ 2010 Express, а это бы затянулся процесс моего изучения MQL
 

hoz

Активный участник
Вот кусок функции:
PHP:
Expand Collapse Copy
if(GetStateMa() == MA_TALKING_LONG)
    {
      maxValue = iHigh(Symbol(),i_ExtremumLookingTF,i_maxValueShiftB);
      minValue = iLow(Symbol(),i_ExtremumLookingTF,i_minValueShiftB);
            
      if((maxValue - minValue) >= 7*pt)
      return(true);
    }

Решил я укоротить код. В плане производительности есть ли разница воспользуюсь я функцией High или iHigh ?

Имею ввиду так:

PHP:
Expand Collapse Copy
if(GetStateMa() == MA_TALKING_LONG)
    {
      maxValue = High[iHighest(Symbol(),i_ExtremumLookingTF,MODE_HIGH,i_maxValueShiftB,0)];
      minValue = Low[iLowest(Symbol(),i_ExtremumLookingTF,MODE_HIGH,i_minValueShiftB,0)];
            
      if((maxValue - minValue) >= 7*pt)
      return(true);
    }

или так:
PHP:
Expand Collapse Copy
if(GetStateMa() == MA_TALKING_LONG)
    {
      maxValue = iHigh(Symbol(),i_ExtremumLookingTF,iHighest(Symbol(),i_ExtremumLookingTF,MODE_HIGH,i_maxValueShiftB,0));
      minValue = iLow(Symbol(),i_ExtremumLookingTF,iLowest(Symbol(),i_ExtremumLookingTF,MODE_HIGH,i_minValueShiftB,0));
            
      if((maxValue - minValue) >= 7*pt)
      return(true);
    }

Как грамотнее писать в плане производительности и вообще.. ?
 

ale002

::: __,,,^._.^,,,__ :::
High[] - массив, iHigh() - функция, котор обрабатывает массив. Вывод, имхо, очевиден. iHigh нужно для мультивалютных расчетов

На предмет укоротить:
PHP:
Expand Collapse Copy
if(GetStateMa() == MA_TALKING_LONG)
  return(
    High[iHighest(Symbol(),i_ExtremumLookingTF,MODE_HIGH,i_maxValueShiftB,0)]
    -
    Low[iLowest(Symbol(),i_ExtremumLookingTF,MODE_HIGH,i_minValueShiftB,0)]
    >= 7*pt
  );

iLowest(..MODE_HIGH..) - бывает, конечно, но чаще MODE_LOW
 
  • Like
Реакции: hoz

Алекc1234

Местный житель
Привет всем. Есть такой код
if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))
{
double fir_or_time = OrderOpenTime();
i = iBarShift(NULL,0,fir_or_time);
}
То есть я задаю свечу первого по времени открытия ордера. Но в итоге сов видит последний ордер. Подскажите, что сделано не так?
 

Алекc1234

Местный житель
Привет всем. Есть такой код
if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))
{
double fir_or_time = OrderOpenTime();
i = iBarShift(NULL,0,fir_or_time);
}
То есть я задаю свечу первого по времени открытия ордера. Но в итоге сов видит последний ордер. Подскажите, что сделано не так?

Вопрос пока снимается, вроде разбираюсь
 

eevviill

Заблокирован
Привет всем. Есть такой код
if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))
{
double fir_or_time = OrderOpenTime();
i = iBarShift(NULL,0,fir_or_time);
}
То есть я задаю свечу первого по времени открытия ордера. Но в итоге сов видит последний ордер. Подскажите, что сделано не так?
Ты не выбираешь первый ордер. Ты выбираешь последний. причём не перебором.

Надо так.
PHP:
Expand Collapse Copy
for(int i=OrdersTotal()-1; i>=0; i--)
 {
 if(OrderSelect(i,SELECT_BY_POS))
 {
 if(OrderMagicNumber()==magic)
 {
 if(OrderSymbol()==Symbol())
 {
double fir_or_time = OrderOpenTime();
int i = iBarShift(NULL,0,fir_or_time);
break;
 }
 }
 }
 }
 

Fillelin

Элитный участник
Приветствую Всех с Новым Годом!

Подскажите кто знает: возможно ли привязать OBJ_TEXT скажем к Bid, что бы текст выводимый OBJ_TEXT-ом вёл себя так же как и OBJ_ARROW с ценовой меткой (SYMBOL_RIGHTPRICE)? То есть не смещался относительно цены Bid, а постоянно находился строго напротив, как ценовая метка.
 

Rust

Новичок форума
Здравствуйте !
Я все таки прочту эту ветку с начала до конца, но попозже, а сейчас прошу Вас рассмотреть какую-то совсем уже непонятную для меня проблемку, на вопросы по которой и во всём инете так и не нашёл ответа с решением проблемы.
Вообщем вот уже третий месяц у меня пошёл с проработкой советника-закрывалки и всё никак эта работа не завершится...
Последний успешный вариант такой: - "прицепил" к стандартному MT4 скрипту Close условия своего индикатора XMA и всё заработало как и было задумано, но вот притормаживает завершение работы какая-то отчетность по закрытому ордеру "unknown ticket 82372822 for OrderClose".
Такой "принт" я и не "заказывал", но такой отчет продолжается даже после выключения кнопки разрешения советнику торговать...
Забивает диск гигабайтами одинаковых строчек отчета в логе эксперта.
Прошу посмотреть и если кому будет ведома такая проблема прошу просветить по её сути, что это такое ?
Как-бы её устранить ?
СПАСИБО !

//+------------------------------------------------------------------+
//| test Close 8.mq4 |
//+------------------------------------------------------------------+
extern double Lots = 1.0;
extern int Phma = 12; //период HMA
extern int Mhma = 3; // метод HMA
extern int Magic=7;
extern int d = 1;

double price;
int ticket,ticket1,ticket2,COLOR,i,type,err,Slippage=3 ,hma,lhma;
bool result;

int start()
{
double hma=iCustom(NULL,0,"hma",Phma,Mhma,0,2,0);
double lhma=iCustom(NULL,0,"hma",Phma,Mhma,0,2,4);
{
if (lhma > hma)// && (lhma-hma) > dhma)
COLOR = 1;//RED
}
{
if (hma > lhma) //&& (lhma-hma) > dhma)
COLOR = 2;//GRIN
}
//----
for(i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
type=OrderType();
if((type==OP_BUY) && OrderSymbol() == Symbol() && (COLOR == 1))
{
while(true)
{
ticket = OrderTicket();
price=MarketInfo(OrderSymbol(),MODE_BID);
result=OrderClose(ticket,Lots,price,Slippage,Green );
}
}
if((type==OP_SELL) && OrderSymbol() == Symbol() && (COLOR == 2))
{
while(true)
{
ticket = OrderTicket();
price=MarketInfo(OrderSymbol(),MODE_ASK);
result=OrderClose(ticket,Lots,price,Slippage,Red);
} } }

else Print( "When selecting a trade, error ",GetLastError()," occurred");
}
return(0);
}
//+------------------------------------------------------------------+
 

alexshell

Элитный участник
Ты не выбираешь первый ордер. Ты выбираешь последний. причём не перебором.

Надо так.
PHP:
Expand Collapse Copy
for(int i=OrdersTotal()-1; i>=0; i--)
 {
 if(OrderSelect(i,SELECT_BY_POS))
 {
 if(OrderMagicNumber()==magic)
 {
 if(OrderSymbol()==Symbol())
 {
double fir_or_time = OrderOpenTime();
int i = iBarShift(NULL,0,fir_or_time);
break;
 }
 }
 }
 }

eevviill. А почему ты считаешь,что таким образом выберется именно первый по времени ордер?
 

Алекc1234

Местный житель
eevviill. А почему ты считаешь,что таким образом выберется именно первый по времени ордер?

Действительно, вроде у меня так не выходит...Может, как-нибудь по другому нужно?
 
Последнее редактирование:

Ugar

Гуру форума
while(true)
{
ticket = OrderTicket();
price=MarketInfo(OrderSymbol(),MODE_BID);
result=OrderClose(ticket,Lots,price,Slippage,Green );
}
Попадая в цикл, выхода из него нет. Происходит зацикливание. тольео полный перезапуск всего терминала поможет выйти из такого зацикливания.
 
Верх