Не вникал в логику Вашего цикла. Но при беглом взгляде бросилось в глаза то, что я подчеркнул Вам красной чертой. Если данные ДЦ не поменялись, то повторяем. А если поменялись? Что советнику делать если поменялись. Где команда?
Когда программист ложится спать, он ставит возле кровати два стакана. Один - с водой - на случай, если программист захочет пить. Другой - пустой - на случай, если программист не захочет пиь.
Шутка-шуткой, но в программинге взачастую приходится обрабатывать обе ветви древа дихтомического деления.
P.S.
Кстати, artmedia70, обратите внимание, как расположены скобки и отступы Вашего кода на моём скриншоте. При такой организации кода он беолее читабелен. Это Вам просто к информации.
Блин, чё-то у меня не пишет мои сообщения там, где нужно писать и не вставляет коды. drknn, спасибо за информацию о структуировании моего кода. Я свой код практически также, как и вы составляю. Просто ну не даёт мне SRC вставить код и всё тут. Даже здесь приходится писать в вашем же сообщении, потому как за пределы этого поля меня не пускает, хоть тресни... Это так, предисловие. По поводу Вами подчёркнутого... А какую я ему ещё команду должен дать, если ему ничего не нужно делать при невыполнении условия? И если условие, которое не выполняется, стоит перед закрывающей скобкой цикла то далее мы всё равно попадём на начало новой итерации при соблюдении условия цикла mode<=9... При завершении итераций по условию mode<=9, переходим к следующей закрывающей скобке родительского цикла и переходим к следующему валютному инструменту пока Instr_Count (счётчик вал. инструментов) не закончится по условию ln<=Instr_Count... Разве не так? Или Вы предлагаете break использовать перед закрывающей скобкой? Хотя... Ошибки там где-то у меня есть... При "повешеньи" советника на график у меня один за другим сыплются сообщения об открытии позиций, об изменениях минимальной дистанции и т.д. Причём даже не с приходом тика, а подряд, как из пулемёта... :) Жаль знаний не хватает самому разобраться, а здесь сложно при невозможности (по-крайней мере у меня) разместить код, используя SRC. В любом случае - спасибо за участие. Заставляет задуматься... ;)
планирую использовать OrderMagicNumber(), сделать встроенную функцию для вычисления его для каждой конкретной свечи, так вот желательно чтобы для каждой свечи и тф он был уникальным. в частности не нашел способа склеить 2 переменные int Period( ) и datetime Time[i] к виду
xxxyyyyyyyyyy, где ххх - минуты из Period(), а yyyyyyyyyy- секунды из Time[i]
artmedia70, мы опять возвращаемся в точку отсчёта. Првое и самое главное - это алгоритм. То есть то, как должна работать программа. Если нет чёткого представления, то нет и программы, ибо нельзя сделать код, который не знаю как должен работать.
Давайте по-строчкам разберём кусочек Вашего кода, который работает не правильно. Только давайте разберём всё от и до. То есть, Вы будете предельно точным в обосновании почему Вы задействуете в этом месте именно этот способ, инструмент, подход. А? (Это не работа на публику - это попытка разобраться в самом себе - программинг - это сначала медитация, потом - кучка деталек, связанных болтиками, гаечками, шпонками, шпильками и прочей мелочёвкой). Делаем?
算法就在那里。而且很有效。我只是在学习,所以我从教程中提取代码并根据自己的需要进行修改。
专家顾问模板,在目前的状态下,它应该只是检测终端中发生的事情,并在指标窗口的屏幕上显示所有事件。
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж//=================== ПОДКЛЮЧЕНИЕ ВНЕШНИХ МОДУЛЕЙ ================//--------------------------------------------------------------- 2 --#include <stdlib.mqh>#include <stderror.mqh>#include <WinUser32.mqh>//--------------------------------------------------------------- 3 --#include <Переменные.mqh> // Описание переменных эксперта. #include <Терминал.mqh> // Присоединение функции Terminal.#include <События.mqh> // Присоединение функции Sobytiya.#include <Информ.mqh> // Присоединение функции Inform.//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж//// //жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжint init()
{
Predopred(); // Предопределение некоторых переменных
Level_old=MarketInfo(Symbol(),MODE_STOPLEVEL );//Миним. дистаниция
Terminal();
return;
}
//=================================================================int start()
{
Terminal(); // Эта функция стоит первой в ..// ..последовательности функций// ... // Последующий код функции start()
Events(); // Функция обработки событий// ... // Последующий код функции start()return;
}
//=================================================================int deinit()
{
// ... // Код функции deinit()return;
}
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
终端 - 考虑到所有未结头寸和设定的订单。
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж/*
Соответствие элементов массивов Mas_Ord_New и Mas_Ord_Old характеристикам ордеров.
Таблица показывает расположение элементов массива для ордеров одного вал. инструмента.
Данные о других ордерах, открытых по другим вал. инструментам хранятся в таких же таблицах,
но на другой индексной плоскости трёхмерного массива и индексируются первым значением массива:
Mas_Ord_New [данные о вал. инстр.] [] []
=====================================================================================================================
| |Не опред.|Курс открытия |StopLoss |TakeProfit |Номер ордера |Кол-во лотов |Тип ордера |MagicNumder |Коммент.|ТФ |
=====================================================================================================================
|N | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
---------------------------------------------------------------------------------------------------------------------
|0 | | | | | | | | | | |
---------------------------------------------------------------------------------------------------------------------
|1 | | | | | | | | | | |
---------------------------------------------------------------------------------------------------------------------
|2 | | | | | | | | | | |
---------------------------------------------------------------------------------------------------------------------
......................
---------------------------------------------------------------------------------------------------------------------
|30| | | | | | | | | | |
=====================================================================================================================
В ячейке [0][0] хранится кол-во ордеров по данному вал. инструменту...
Самая первая индексная плоскость массива содержит дополнительную информацию по валютным инструментам и выглядет так:
===============================================================================================================================================
| |Не опред.|MODE_POINT |MODE_DIGITS |MODE_SPREAD |MODE_STOPLEVEL |MODE_LOTSIZE |MODE_TICKVALUE |MODE_TICKSIZE |MODE_SWAPLONG|MODE_SWAPSHORT |
===============================================================================================================================================
|N | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
-----------------------------------------------------------------------------------------------------------------------------------------------
|0 | Кол-во | | | | | | | | | |
-----------------------------------------------------------------------------------------------------------------------------------------------
|1 | EURUSD | | | | | | | | | |
-----------------------------------------------------------------------------------------------------------------------------------------------
|2 | USDCHF | | | | | | | | | |
-----------------------------------------------------------------------------------------------------------------------------------------------
......................
-----------------------------------------------------------------------------------------------------------------------------------------------
|15| AUDCAD | | | | | | | | | |
===============================================================================================================================================
В ячейке [0][0][0] содержится информация об общем кол-ве всех ордеров и позиций в терминале
В ячейке [][здесь][] содержится наименование валютного инструмента
В ячейке [][][здесь] содержится дополнительная информация о финансовых инструментах от ДЦ
*/int Terminal()
{
//============================================== Предопределения ====================ArrayCopy(Mas_Ord_Old, Mas_Ord_New); // Сохраняем предыдущую историюArrayInitialize(Mas_Ord_New,0); // Обнуление массива текущих ордеров//=============================================== Анализ ордеров ===============================for (int i=0; i<OrdersTotal(); i++) // По всем ордерам терминала
{
if(OrderSelect(i, SELECT_BY_POS)==true) // Если ещё есть живой ордер
{
//---------------------------- Определение индекса валютного инструмента -----------------------string Symb=OrderSymbol(); // Выясним валюту текущего выбранного ордераfor (int ind=1; ind<=Instr_Count; ind++)//Instr_Count=кол-ву вал. инструментов в ф-ции Predopred (Переменные)// Поиск по массиву вал. инстр.
{
if (Symb==Instrument[ind]) // Индекс определён, поиск законченbreak; // Выходим из цикла по ind
}
//---------------------- Формирование нового массива ордеров -----------------------------------
Mas_Ord_New[0][0][0]++; // Считаем общее количество ордеров в терминале и заносим в ячейку [0][0][0]
Mas_Ord_New[ind][0][0]++; // Считаем колич.орд. по валют.пареint k=Mas_Ord_New[ind][0][0]; // Формальная переменная
Mas_Ord_New[ind][k][1] = NormalizeDouble(OrderOpenPrice(), // Курс откр. ордеровDigits);
Mas_Ord_New[ind][k][2] = NormalizeDouble(OrderStopLoss(), // Курс SLDigits);
Mas_Ord_New[ind][k][3] = NormalizeDouble(OrderTakeProfit(), // Курс ТРDigits);
Mas_Ord_New[ind][k][4] = OrderTicket(); // Номер ордера
Mas_Ord_New[ind][k][5] = OrderLots(); // Колич. лотов
Mas_Ord_New[ind][k][6] = OrderType(); // Тип ордера
Mas_Ord_New[ind][k][7] = OrderMagicNumber(); // Магическое числоif (OrderComment()=="")
Mas_Ord_New[ind][k][8]=0; // Если нет комментelse
Mas_Ord_New[ind][k][8]=1; // Если есть коммент// Здесь нужно занести информацию о принадлежности к ТФ из Mas_Ord_Old. Я не знаю правильно ли...// int t=Mas_Ord_Old[ind][k][9]; // t= значению ячейки [][][9] из старого массива // Mas_Ord_New[ind][k][9]=t; // запишем её в новый массив// Или так, даже скорее всего, именно так...
Mas_Ord_New[ind][k][9]=Mas_Ord_Old[ind][k][9];
//-----------------------------------------------------------------
}
}
//=================================================================return;//();
}
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
Не вникал в логику Вашего цикла. Но при беглом взгляде бросилось в глаза то, что я подчеркнул Вам красной чертой. Если данные ДЦ не поменялись, то повторяем. А если поменялись? Что советнику делать если поменялись. Где команда?
Когда программист ложится спать, он ставит возле кровати два стакана. Один - с водой - на случай, если программист захочет пить. Другой - пустой - на случай, если программист не захочет пиь.
Шутка-шуткой, но в программинге взачастую приходится обрабатывать обе ветви древа дихтомического деления.
P.S.
Кстати, artmedia70, обратите внимание, как расположены скобки и отступы Вашего кода на моём скриншоте. При такой организации кода он беолее читабелен. Это Вам просто к информации.
______________________________________________________________________________________________________________________________________________________________________
Блин, чё-то у меня не пишет мои сообщения там, где нужно писать и не вставляет коды.
drknn, спасибо за информацию о структуировании моего кода. Я свой код практически также, как и вы составляю. Просто ну не даёт мне SRC вставить код и всё тут. Даже здесь приходится писать в вашем же сообщении, потому как за пределы этого поля меня не пускает, хоть тресни...
Это так, предисловие.
По поводу Вами подчёркнутого...
А какую я ему ещё команду должен дать, если ему ничего не нужно делать при невыполнении условия? И если условие, которое не выполняется, стоит перед закрывающей скобкой цикла то далее мы всё равно попадём на начало новой итерации при соблюдении условия цикла mode<=9...
При завершении итераций по условию mode<=9, переходим к следующей закрывающей скобке родительского цикла и переходим к следующему валютному инструменту пока Instr_Count (счётчик вал. инструментов) не закончится по условию ln<=Instr_Count... Разве не так? Или Вы предлагаете break использовать перед закрывающей скобкой?
Хотя... Ошибки там где-то у меня есть... При "повешеньи" советника на график у меня один за другим сыплются сообщения об открытии позиций, об изменениях минимальной дистанции и т.д. Причём даже не с приходом тика, а подряд, как из пулемёта... :)
Жаль знаний не хватает самому разобраться, а здесь сложно при невозможности (по-крайней мере у меня) разместить код, используя SRC.
В любом случае - спасибо за участие. Заставляет задуматься... ;)
TheXpert писал(а) >>
胡说八道。
想想看--如果信息分散在几页纸上,在心理上是很难处理的--你需要不断地来回跳动翻阅代码来分析整个画面。但人不是兔子或青蛙,无法做到这一点。当然,当代码由三行组成时,情况就不是这样了,而是更复杂的东西。
也许是滑坡?
你说的 "自动 "操作是什么意思?你说的 "自动 "是什么意思?
谢谢,你可能是对的...虽然,如果是SL,这可以理解--损失会增加,但为什么TR会减少利润呢?"它也应该更大?
一个 "自动机 "是一个独立工作的专家。
Спасибо, навeрноe Вы правы... хотя, ecли SL, то понятно - убыток увeличится, а почeму ТР умeньшаeт прибыль? по идee тожe должeн быть большe?
"автомат" - это экспeрт, работающий самостоятeльно.
artmedia70, 我们又回到了原点。 第一件也是最重要的事情是算法。就是说,这个项目应该如何运作。如果你没有一个明确的想法,你就没有一个程序,因为你不能制作你不知道它应该如何工作的代码。
让我们一行一行地分析你的代码中不能正常工作的片段。但让我们把它从头到尾分解一下。也就是说,你将非常精确地证明你为什么使用这种特定的方法、工具或方式。А?(这不是给观众看的作品--这是理解自己的尝试--编程首先是冥想,然后是--一堆细节,由螺栓、螺母、镙丝、销子和其他小东西连接起来)。做什么?
日安!!!。
我打算使用OrderMagicNumber(),为每个特定的蜡烛图做一个内置函数来计算它,所以最好使它对每个蜡烛图和TF都是唯一的。特别是我没有找到一种方法来把2个变量
intPeriod( )和
datetime Time[i]
贴在一起,形成
xxxyyyyy,
其中xxx是Period( )的分钟,yyyyyy - Time[i] 的秒。
如何更好地实施它?
我真是个初学者 :)
Добрый день!!!
планирую использовать OrderMagicNumber(), сделать встроенную функцию для вычисления его для каждой конкретной свечи, так вот желательно чтобы для каждой свечи и тф он был уникальным.
в частности не нашел способа склеить 2 переменные
int Period( ) и
datetime Time[i]
к виду
xxxyyyyyyyyyy,
где ххх - минуты из Period(), а yyyyyyyyyy- секунды из Time[i]
как это лучше реализовать?
такой вот из меня начинающий :)
期限是一个整数变量,尽管它可以打包成一个数字,为什么在魔术中需要一个日期时间呢?你可以找出订单的开盘时间,因为它是。
Период это целочисленная переменная, хотя ее можно упаковать до одной цифры, а зачем в магике дататайм? время открытия ордера и так можно узнать.
我们的目标是为特定时间框架内的特定蜡烛指定一个独特的神奇数字,对于开盘时间相同的2个m15和h1蜡烛,它应该是不同的。
所以我的主要想法是把它与价值联系起来
时间[]和
魔术师的视觉实用性并不重要,我倾向于让它成为一个5-10个字符的int格式值...
编辑
----------
基本上我已经找到了一个方法...:)
artmedia70, мы опять возвращаемся в точку отсчёта. Првое и самое главное - это алгоритм. То есть то, как должна работать программа. Если нет чёткого представления, то нет и программы, ибо нельзя сделать код, который не знаю как должен работать.
Давайте по-строчкам разберём кусочек Вашего кода, который работает не правильно. Только давайте разберём всё от и до. То есть, Вы будете предельно точным в обосновании почему Вы задействуете в этом месте именно этот способ, инструмент, подход. А? (Это не работа на публику - это попытка разобраться в самом себе - программинг - это сначала медитация, потом - кучка деталек, связанных болтиками, гаечками, шпонками, шпильками и прочей мелочёвкой). Делаем?
算法就在那里。而且很有效。我只是在学习,所以我从教程中提取代码并根据自己的需要进行修改。
专家顾问模板,在目前的状态下,它应该只是检测终端中发生的事情,并在指标窗口的屏幕上显示所有事件。
终端 - 考虑到所有未结头寸和设定的订单。