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

qqmber

Почетный гражданин
OBJ_TEXT
Почему в справке написано что использует 1 координату?
По моему 2. Время и цену.

OBJ_HLINE вот эта одну координату использует. Цену.
Или я не так понимаю?
Терминология неудачная.
Координата это пара (время, цена). OBJ_TEXT использует одну координату, OBJ_HLINE только цену, игнорируя время.
 

greatiger

Активный участник
Возьми 2 файла и сравни. До и после доработки.

Сначала 2 строки добавилось.
Сразу после Старт строки.
И в конце пару функций. Всё!

:idea: )

ПС... ниче вроде не забыл?

1. В переменные
extern double TakeProfit = 10.0;

extern bool исп_проц_от_депо_закр_все = false;
extern double проц_от_депо_закр_все = 0.4;

2. После start
if (исп_проц_от_депо_закр_все && Профіт_відс_валюти_ф()>=проц_от_депо_закр_все) закриття_ордеру_ф();

3. В функции в конец

double Профіт_відс_валюти_ф()
{

return(Профіт_валюти_ф()/(AccountBalance()/100));
}


double Профіт_валюти_ф()
{
double профіт;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS)==true)
{
if(OrderMagicNumber()==MagicNumber)
{
if(OrderSymbol()==Symbol())
{
профіт+=OrderProfit()+OrderCommission()+OrderSwap();
}
}
}
}

return(профіт);
}




void закриття_ордеру_ф()
{
for(int i=OrdersTotal()-1; i>=0; i--)
{
OrderSelect(i,SELECT_BY_POS);
{
if(OrderMagicNumber()==MagicNumber)
{
if(OrderSymbol()==Symbol())
{
bool закрився_ордер=false;
for (int j_ex = 0;j_ex < 8; j_ex++)
{
while(IsTradeContextBusy()) Sleep(1000);

if(OrderType()==OP_BUY ) закрився_ордер=OrderClose(OrderTicket(),OrderLots(),Bid,slip,Yellow);
if(OrderType()==OP_SELL) закрився_ордер=OrderClose(OrderTicket(),OrderLots(),Ask,slip,Yellow);
if(OrderType()==OP_SELLSTOP || OrderType()==OP_BUYSTOP || OrderType()==OP_SELLLIMIT || OrderType()==OP_BUYLIMIT) закрився_ордер=OrderDelete(OrderTicket(),CLR_NONE);
if(закрився_ордер==true)break;
}
}
}
}
}

}
 
Последнее редактирование:

VLV

Почетный гражданин
Извините пожалуйста,что не совсем по таме,вот такая фигня,никак в терминал не зайти,висит внизу типа советника в режиме тестирования и все,а все отккрытые позы -не закрыть не открыть,весь чертовщиной занят,и никак в нормальный режим,чего сделать не подскажете?
 
Последнее редактирование:

AlexeyVik

Программист mql4 mql5
Извините пожалуйста,что не совсем по таме,вот такая фигня,никак в терминал не зайти,висит внизу типа советника в режиме тестирования и все,а все отккрытые позы -не закрыть не открыть,весь чертовщиной занят,и никак в нормальный режим,чего сделать не подскажете?
Хоть-бы скрин прицепил если кроме "типа", "фигня" и чертовщины нечего сказать.

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

Алекc1234

Местный житель
Всем привет. Подскажите, как грамотно написать в коде - "если нет открытых ордеров, то..."Я вот пишу просто if(OrderOpenTime == 0) но так работает глючно...
 

eevviill

Заблокирован
Всем привет. Подскажите, как грамотно написать в коде - "если нет открытых ордеров, то..."Я вот пишу просто if(OrderOpenTime == 0) но так работает глючно...
if(OrdersTotal()==0)...
Для тестера сойдёт.

Ну а вообще если правильно, то пишешь функцию подсчёта ордеров. В которой перебираешь ордера с нужным меджиком и подсчитываешь их.
 

Дмитрий 2010

Интересующийся
Добрый день всем присутствующим. Второй день бъюсь над проблемой: скрипт при запуске не создает файл для записи и чтения вот код помогите пожалуста

int handle;

int ошибка;

//+------------------------------------------------------------------+

//| script program start function |

//+------------------------------------------------------------------+

int start(){

ошибка=GetLastError();Print("ошибка=",ошибка);

handle=FileOpen("News.txt.",FILE_CSV|FILE_READ|FILE_WRITE);Print("handle=",handle); Print("ошибка=",ошибка);

if(handle<1)

{

Print("Файл News.txt не обнаружен, последняя ошибка ", GetLastError());

return(false);

}

FileWrite( handle, 165897) ;Print("ошибка=",ошибка);

if(handle>0)Print("ошибка=",ошибка);

{

FileWrite(handle, Close[0], Open[0], High[0], Low[0]);Print("ошибка=",ошибка);

FileClose(handle);Print("ошибка=",ошибка);

}



return(0);

}

принт ошибок =0

принт параметра открытия файла =1

файл не отображается в папках
 

alexshell

Элитный участник
Добрый день всем присутствующим. Второй день бъюсь над проблемой: скрипт при запуске не создает файл для записи и чтения вот код помогите пожалуста
файл не отображается в папках
Глянул вроде всё правильно. Скопировал ваш код.Кинул на график. Файл создался и с записанными данными. В чем у вас проблема не понимаю. Может файл не там смотрите?Чтоб небыть голословным вот созданный файл по вашему коду. Кидал на золото.
 

Вложения

  • News.txt
    News.txt
    40 байт · Просмотры: 14

Дмитрий 2010

Интересующийся
скрипт запускается и ошибок нет только создаваемый файл не отображается (уже массу всего перепробовал ) осталось только пере установка виндовс.
alexshell спасибо большое
 

Алекc1234

Местный житель
Подскажите пожалуйста, как правильно написать в коде - если цена дошла до тейкпрофита. Я сделал так
PHP:
Expand Collapse Copy
if (OrderType()==OP_BUY) {
 if(Ask==OrderTakeProfit()) { ...
Тут цена не доходит то тейка - так и задумано, только работает некорректно. Может, есть какие-то нюансы, что дописать в коде...
 

AlexeyVik

Программист mql4 mql5
Подскажите пожалуйста, как правильно написать в коде - если цена дошла до тейкпрофита. Я сделал так
PHP:
Expand Collapse Copy
if (OrderType()==OP_BUY) {
 if(Ask==OrderTakeProfit()) { ...
Тут цена не доходит то тейка - так и задумано, только работает некорректно. Может, есть какие-то нюансы, что дописать в коде...
цитата из справки
double OrderTakeProfit()
Возвращает значение цены закрытия позиции при достижении уровня прибыльности (take profit) для текущего выбранного ордера
Ордер должен быть предварительно выбран с помощью функции OrderSelect().
то-же самое и OrderType()
 

Алекc1234

Местный житель
цитата из справки

то-же самое и OrderType()

Да, это всё написанное мною идёт в цикле с OrderSelect, но всё равно нормально не работает. То есть то работает, то нет... Может, для корректной работы ещё что-то нужно?
 
Последнее редактирование:

Дмитрий 2010

Интересующийся
Здравствуйте товарищи я намедни задавал вопрос по поводу работы скрипта (а точнее функции FileOpen-пост=1047) так вот после пере установки виндовс док. открывался по адресу(С:\Пользователи\администратор\AppData\Logcal\VirtualStore\Program Files (x86)\ MT4\experts\files) хотя терминал стоит (С:\Program Files (x86)\ MT4) проблема была решена после скачивания и установки свежего терминала (предыдущая версия терминала на "чистом" виндовс все также работала криво).Может комуто пригодится такой опыт.
 
Последнее редактирование:

AlexeyVik

Программист mql4 mql5
Да, это всё написанное мною идёт в цикле с OrderSelect, но всё равно нормально не работает. То есть то работает, то нет... Может, для корректной работы ещё что-то нужно?
Ну извини, что не сразу заметил.
Как ты думаешь, какова вероятность, что Ask будет точно-точно равен тейку ордера??? Вот именно... С той самой вероятностью, с которой твой код работает правильно.
Правильно будет написать >= или <= , ну надеюсь что ты понял.
 

AlexeyVik

Программист mql4 mql5
Здравствуйте товарищи я намедни задавал вопрос по поводу работы скрипта (а точнее функции FileOpen-пост=1047) так вот после пере установки виндовс док. открывался по адресу(С:\Пользователи\администратор\AppData\Logcal\VirtualStore\Program Files (x86)\ MT4\experts\files) хотя терминал стоит (С:\Program Files (x86)\ MT4) проблема была решена после скачивания и установки свежего терминала (предыдущая версия терминала на "чистом" виндовс все также работала криво).Может комуто пригодится такой опыт.
Самый эффективный способ избавиться от таких заморочек ставить МТ в корень диска С:\MT4 то-есть убрать из пути установки "Program Files (x86)\"
Или, если диск разбит на логические диски, то ставить на D:\MT4
 

eevviill

Заблокирован
Если мы скажем внешней перемнной manu присвоили тру.
После определённых действий в Старте присвоили фолс.

Когда юзер зайдёт в настройки прикреплённого совеника то там будет тру или фолс?
 

AlexeyVik

Программист mql4 mql5
Если мы скажем внешней перемнной manu присвоили тру.
После определённых действий в Старте присвоили фолс.

Когда юзер зайдёт в настройки прикреплённого совеника то там будет тру или фолс?
Привет Василий. Я-бы не советовал ставить extern переменные в качестве флагов. Дело в том, что даже если переменная будет false, то когда вызываешь окно свойств советника оттуда считываются значения по умолчанию и дальше результат не предсказуем. Нажмёшь "Отмена" возможно значение останется, нажмёшь "ОК" поменяется обязательно. И соответственно будет нарушен алгоритм.
 

Алекc1234

Местный житель
Ну извини, что не сразу заметил.
Как ты думаешь, какова вероятность, что Ask будет точно-точно равен тейку ордера??? Вот именно... С той самой вероятностью, с которой твой код работает правильно.
Правильно будет написать >= или <= , ну надеюсь что ты понял.

Спасибо большое - действительно, в этом >= и <= и было дело. Сейчас всё зароботало так как надо!!!!
 

Алекc1234

Местный житель
Подскажите, а можно написать, чтобы в тестере тест бы проходил не по спреду на графике, а по тому, какой сам поставил во входных параметрах? И если да, то как это сделать?
 

AlexeyVik

Программист mql4 mql5
Подскажите, а можно написать, чтобы в тестере тест бы проходил не по спреду на графике, а по тому, какой сам поставил во входных параметрах? И если да, то как это сделать?
Здесь посмотри _http://forum.alpari.ru/showpost.php?p=3127042&postcount=7
 
Верх