Не вникал в логику Вашего цикла. Но при беглом взгляде бросилось в глаза то, что я подчеркнул Вам красной чертой. Если данные ДЦ не поменялись, то повторяем. А если поменялись? Что советнику делать если поменялись. Где команда?
Когда программист ложится спать, он ставит возле кровати два стакана. Один - с водой - на случай, если программист захочет пить. Другой - пустой - на случай, если программист не захочет пиь.
Шутка-шуткой, но в программинге взачастую приходится обрабатывать обе ветви древа дихтомического деления.
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 писал(а) >>
嘘つけ。
考えてみてください。情報が何ページにもわたっていると、心理的に情報を処理するのが難しく、全体像を分析するために常にコードを行ったり来たりする必要があります。しかし、人間はそれをするのはウサギでもカエルでもない。もちろん、3行で構成されるコードではなく、もっと複雑なものであれば、この限りではありません。
スリッページでしょうか?
自動運転とはどういう意味ですか?自動とはどういう意味ですか?
ありがとうございます、そうでしょうね...。SLなら損失が増えるのは理解できるが、なぜTRだと利益が減るのか、それも大きくすべきなのか?
オートマトン」とは、自分ひとりで仕事をしている専門家のこと。
Спасибо, навeрноe Вы правы... хотя, ecли SL, то понятно - убыток увeличится, а почeму ТР умeньшаeт прибыль? по идee тожe должeн быть большe?
"автомат" - это экспeрт, работающий самостоятeльно.
artmedia70、 振り出しに 戻りましたね。 まず、最も重要なのはアルゴリズムです。つまり、プログラムがどのように機能するかということです。明確なアイデアがなければ、プログラムにはなりません。どう動くかわからないコードは作れないのですから。
正しく動作しないコードの断片を一行ずつ解析してみましょう。しかし、最初から最後まで分解して考えてみましょう。つまり、なぜこの方法、ツール、アプローチを使うのか、その理由を非常に正確に説明することができるようになります。А?(これは観客のための作品ではなく、自分自身を理解するための試みです。プログラミングはまず瞑想であり、次に、ボルト、ナット、ダボ、ピン、その他の小さなものでつながれた細部の束なのです)。している?
ごきげんよう!!!
OrderMagicNumber()を使って、特定のローソク足ごとに計算する組み込み関数を作ろうと思っているので、ローソク足ごと、TFごとにユニークにすることが望ましい。
特に、2つの変数
intPeriod( ) と
datetime Time[i]
を貼り合わせて
xxxyyyyyy,
とする方法が見つからなかった。xxx は Period( ) から分、 yyyyyyy は Time[i] から秒とする。
どうすればより良い実装ができるか?
私はこんな初心者ですが :)
Добрый день!!!
планирую использовать OrderMagicNumber(), сделать встроенную функцию для вычисления его для каждой конкретной свечи, так вот желательно чтобы для каждой свечи и тф он был уникальным.
в частности не нашел способа склеить 2 переменные
int Period( ) и
datetime Time[i]
к виду
xxxyyyyyyyyyy,
где ххх - минуты из Period(), а yyyyyyyyyy- секунды из Time[i]
как это лучше реализовать?
такой вот из меня начинающий :)
ピリオドは一桁に詰めることができますが、整数変数です。マジックでなぜdatetimeが必要かというと、注文の開始時刻をそのまま知ることができるからです。
Период это целочисленная переменная, хотя ее можно упаковать до одной цифры, а зачем в магике дататайм? время открытия ордера и так можно узнать.
目標は、与えられた時間枠の与えられたローソクにユニークなマジックナンバーを割り当てることであり、それは同一のオープン時間で2つのm15とh1ローソクに異なるはずです...。
だから、私の主なアイデアは、それを値に接続することです。
時間[]と
マジックの視覚的実用性は重要ではないので、5~10文字のint形式の値にしたい気もしますが...。
エディット
----------
基本的に私はもう方法を見つけたのですが...。:)
artmedia70, мы опять возвращаемся в точку отсчёта. Првое и самое главное - это алгоритм. То есть то, как должна работать программа. Если нет чёткого представления, то нет и программы, ибо нельзя сделать код, который не знаю как должен работать.
Давайте по-строчкам разберём кусочек Вашего кода, который работает не правильно. Только давайте разберём всё от и до. То есть, Вы будете предельно точным в обосновании почему Вы задействуете в этом месте именно этот способ, инструмент, подход. А? (Это не работа на публику - это попытка разобраться в самом себе - программинг - это сначала медитация, потом - кучка деталек, связанных болтиками, гаечками, шпонками, шпильками и прочей мелочёвкой). Делаем?
アルゴリズムはそこにある。そして、それが功を奏する。私はまだ勉強中なので、チュートリアルのコードを参考にして、自分に合うように修正しています。
Expert Advisor テンプレートは、現在の状態では、単にターミナルで何が起こっているかを検出し、画面上のすべてのイベントをインジケータウィンドウに表示する必要があります。
ターミナル - すべてのオープンポジションと設定された注文を考慮します。