Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1518

 
День добрый!
Подскажите, пожалуйста, как можно записать матрицу в файл csv ? 
 
Alexey Viktorov #:

А вы точно не путаете магик с тикетом???

Магик вы устанавливаете какой захотите. В каждый советник назначается свой магик и все ордера и позиции идентифицированы этим магиком. Поэтому, если в советнике вы назначили Magic = 123; то все позиции открытые этим советником будут иметь  Magic 123.

Следовательно перебирая все позиции вы СНАЧАЛА получаете тикет позиции, тем самым выбирая позицию для работы с её свойствами

И только потом начинаете проверять магик. Если среди открытых позиций такой есть, то возвращаете запрет на открытие позиции — false. Если же перебрав все позиции такого магика не обнаружено, то функция проверки должна вернуть разрешение на открытие позиции — true.

Даже если взять ваш вариант

то у вас нарушена последовательность действий.

Получение тикета позиции и выбор её для работы с ней должны быть первой строкой в цикле.

И потом, было бы не плохо увидеть где у вас организован этот цикл. В основном коде или в отдельной пользовательской функции.

Магик с тикетом не путаю.

У меня были варианты с трейлингстопом и замками. Там я делал отдельные функции. А тут правила проще, все основное в OnTick.

Спасибо. Я переставил строку получения тикета в голову цикла. По графикам вижу, что условие открытия позиции есть, но не открываются...

Если можете посоветовать, как эффективно проверять ошибки, был бы очень благодарен. Принты печатаются через один или вообще не печатаются.

 
maxvoronin74 #:
Принты печатаются через один или вообще не печатаются

Как говорил мой первый наставник по электронике (да, да, по электронике - ничего не путаю!), так вот, он говорил: ЧУДЕС НА СВЕТЕ НЕ БЫВАЕТ!!! )) К чему весь этот спич? Значит в какие-то моменты у Вас, просто на просто, выполнение программы не доходит до печати принтов. Ищите у себя в коде проблемы. И, да! Попробуйте освоить отладчик в метаэдиторе. Отличный инструмент для того, чтобы избавляться от чудес. ))

С уважением, Владимир.

 
Возможно их просто не видно во вкладке терминала. Откройте файл с логами и увидите принты. 
 
MrBrooklin #:

Как говорил мой первый наставник по электронике (да, да, по электронике - ничего не путаю!), так вот, он говорил: ЧУДЕС НА СВЕТЕ НЕ БЫВАЕТ!!! )) К чему весь этот спич? Значит в какие-то моменты у Вас, просто на просто, выполнение программы не доходит до печати принтов. Ищите у себя в коде проблемы. И, да! Попробуйте освоить отладчик в метаэдиторе. Отличный инструмент для того, чтобы избавляться от чудес. ))

С уважением, Владимир.

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

У меня в коде робота раньше было несколько функций. И чтобы понимать, в какой функции сейчас программа, в голове функции размещал принт с текстом "Вошли в такую-то функцию". Внутри были принты с именами и значениями переменных на разных этапах и комментами. Открываю, бывало лог файл и вижу целую колонку с "Вошли в такую-то функцию". А ниже вдруг колонка изменяется на строки с именами и значениями переменных. А " вошли в функцию", типа уже не надо печатать. Или возникают ошибки, по которым прописаны принты. Ошибки есть. Принтов об ошибках нет. И так постоянно. Так что выборочность работы принтов определенно имеет место. Просто алгоритм не ясен. Сейчас, вроде, и код проще, а принты почти не работают.

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

Ну, и не по теме. Что чудес не бывает, говорят те, кто их не видел.

 
Roman Kutemov #:
Возможно их просто не видно во вкладке терминала. Откройте файл с логами и увидите принты. 

Как раз, как открыть вкладку терминала, в которой принты видно, я не знаю. И не заморачивался с информацией. Смотрю в самом лог файле, в папке MQL5.

 
maxvoronin74 #:

Как раз, как открыть вкладку терминала, в которой принты видно, я не знаю. И не заморачивался с информацией. Смотрю в самом лог файле, в папке MQL5.

На картинке показал вкладку, где нужно смотреть распечатку принтов.

С уважением, Владимир.


 
MrBrooklin #:

На картинке показал вкладку, где нужно смотреть распечатку принтов.

С уважением, Владимир.


Благодарю. Увидел. Там видно только за сегодня или можно настроить, чтобы были принты за другие дни?
 
maxvoronin74 #:
Благодарю. Увидел. Там видно только за сегодня или можно настроить, чтобы были принты за другие дни?

Никогда не задавался таким вопросом, т.к. не было надобности. Поищите на сайте, может кто-то уже интересовался чем-то похожим. Забейте в поисковике вкладка эксперты ограничения или что-то подобное.

С уважением, Владимир.

 
Добрый день. Может кто подсказать по коду, делаю советника он должен открывать от текущей цены сделку на покупку и на продажу но порядок открытия должен быть таков что сделка Sell всегда выше сделки Buy. Но перепробовал множество уже вариаций всегда получается сначала buy а ниже идет sell. Пробывал открывать по текущей Buy и отложенный Sell через допустим 10 пунктов. но зациклить данную функцию не получилось Вот фрагмент кода 
void OnTick()
{
double currentPrice = SymbolInfoDouble(_Symbol, SYMBOL_BID);
double currentSpread = SymbolInfoInteger(_Symbol, SYMBOL_SPREAD);

MqlTradeResult result; // Переменная result объявляется здесь

// Проверяем, есть ли открытые позиции и спред не превышает максимальное значение
if (PositionsTotal() == 0 && currentSpread <= MaxSpread)
{
// Открываем позицию на продажу
MqlTradeRequest request_sell;
ZeroMemory(request_sell);

request_sell.action = TRADE_ACTION_DEAL;
request_sell.symbol = _Symbol;
request_sell.volume = 0.01;
request_sell.type = ORDER_TYPE_SELL;
request_sell.price = currentPrice;
request_sell.sl = 0;//currentPrice + 300 * _Point;
request_sell.tp = 0;//currentPrice — 300 * _Point;

OrderSend(request_sell, result);


// Открываем позицию на покупку
MqlTradeRequest request_buy;
ZeroMemory(request_buy);

request_buy.action = TRADE_ACTION_DEAL;
request_buy.symbol = _Symbol;
request_buy.volume = 0.01;
request_buy.type = ORDER_TYPE_BUY;
request_buy.price = currentPrice + 200 * _Point;
request_buy.sl = 0;//currentPrice — 300 * _Point;
request_buy.tp = 0;//currentPrice + 300 * _Point;

OrderSend(request_buy, result);

}