[WARNING CLOSED!] Any newbie question, so as not to clutter up the forum. Professionals, don't go by. Can't go anywhere without you. - page 546

 
drknn >>:

Не вникал в логику Вашего цикла. Но при беглом взгляде бросилось в глаза то, что я подчеркнул Вам красной чертой. Если данные ДЦ не поменялись, то повторяем. А если поменялись? Что советнику делать если поменялись. Где команда?

Когда программист ложится спать, он ставит возле кровати два стакана. Один - с водой - на случай, если программист захочет пить. Другой - пустой - на случай, если программист не захочет пиь.

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

P.S.

Кстати, artmedia70, обратите внимание, как расположены скобки и отступы Вашего кода на моём скриншоте. При такой организации кода он беолее читабелен. Это Вам просто к информации.

______________________________________________________________________________________________________________________________________________________________________

Блин, чё-то у меня не пишет мои сообщения там, где нужно писать и не вставляет коды.
drknn, спасибо за информацию о структуировании моего кода. Я свой код практически также, как и вы составляю. Просто ну не даёт мне SRC вставить код и всё тут. Даже здесь приходится писать в вашем же сообщении, потому как за пределы этого поля меня не пускает, хоть тресни...
Это так, предисловие.
По поводу Вами подчёркнутого...
А какую я ему ещё команду должен дать, если ему ничего не нужно делать при невыполнении условия? И если условие, которое не выполняется, стоит перед закрывающей скобкой цикла то далее мы всё равно попадём на начало новой итерации при соблюдении условия цикла mode<=9...
При завершении итераций по условию mode<=9, переходим к следующей закрывающей скобке родительского цикла и переходим к следующему валютному инструменту пока Instr_Count (счётчик вал. инструментов) не закончится по условию ln<=Instr_Count... Разве не так? Или Вы предлагаете break использовать перед закрывающей скобкой?
Хотя... Ошибки там где-то у меня есть... При "повешеньи" советника на график у меня один за другим сыплются сообщения об открытии позиций, об изменениях минимальной дистанции и т.д. Причём даже не с приходом тика, а подряд, как из пулемёта... :)
Жаль знаний не хватает самому разобраться, а здесь сложно при невозможности (по-крайней мере у меня) разместить код, используя SRC.
В любом случае - спасибо за участие. Заставляет задуматься... ;)

 

TheXpert писал(а) >>

Bullshit.


Think about it - it is psychologically difficult to process information if it is spread over several pages - you need to constantly jump back and forth leafing through the code to analyze the whole picture. But a human is not a hare or a frog to do it. Of course, this is not the case when the code consists of three lines, but something more complicated.

 
drknn писал(а) >>

Slippage, perhaps?

What do you mean by "automatic" operation? What do you mean by "automatic"?


Thanks, you're probably right... Although, if SL, it's understandable - the loss will increase, but why does TR reduce the profit? should it be bigger too?

An "automaton" is an expert working on his own.

 
Help! Trying to build a primitive EA with martin... I get order open error 131? What's wrong?
Files:
 
GVA63 >>:


Спасибо, навeрноe Вы правы... хотя, ecли SL, то понятно - убыток увeличится, а почeму ТР умeньшаeт прибыль? по идee тожe должeн быть большe?

"автомат" - это экспeрт, работающий самостоятeльно.

Apparently the spread jumps.
 

artmedia70, we are back to square one. The first and most important thing is the algorithm. That is, how the program is supposed to work. If you don't have a clear idea, you don't have a program, because you can't make code that you don't know how it's supposed to work.

Let's analyze one line at a time a fragment of your code that doesn't work correctly. But let's break it down from the beginning to the end. That is, you will be very precise in justifying why you use this particular method, tool or approach. А? (This is not a work for an audience - this is an attempt to understand yourself - programming is first meditation, then - a bunch of details, connected by bolts, nuts, dowels, pins and other small things). Doing?

 

Good day!!!

I am planning to use OrderMagicNumber(), to make a built-in function to calculate it for each specific candlestick, so it is desirable to make it unique for each candlestick and TF.
in particular I have not found a way to paste together 2 variables
int Period( ) and
datetime Time[i]
to form

xxxyyyyyyyyy,
where xxx is minutes from Period( ), and yyyyyyyyy - seconds from Time[i]

how to implement it better?

I'm such a beginner :)

 
Gravitus >>:

Добрый день!!!

планирую использовать OrderMagicNumber(), сделать встроенную функцию для вычисления его для каждой конкретной свечи, так вот желательно чтобы для каждой свечи и тф он был уникальным.
в частности не нашел способа склеить 2 переменные
int Period( ) и
datetime Time[i]
к виду

xxxyyyyyyyyyy,
где ххх - минуты из Period(), а yyyyyyyyyy- секунды из Time[i]

как это лучше реализовать?

такой вот из меня начинающий :)


The period is an integer variable, although it can be packed to a single digit, and why do you need a datetime in magic? you can find out the opening time of the order as it is.
 
splxgf >>:

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

The goal is to assign a unique magic number for a given candle in a given timeframe, and it should be different for 2 m15 and h1 candles with identical open time...

so my main idea is to connect it to values

Time[] and

period( )

visual practicality of magik is not important, i'm inclined to make it an int format value of 5-10 characters...

edit

----------

Basically I've already found a way... :)

 
drknn >>:

artmedia70, мы опять возвращаемся в точку отсчёта. Првое и самое главное - это алгоритм. То есть то, как должна работать программа. Если нет чёткого представления, то нет и программы, ибо нельзя сделать код, который не знаю как должен работать.

Давайте по-строчкам разберём кусочек Вашего кода, который работает не правильно. Только давайте разберём всё от и до. То есть, Вы будете предельно точным в обосновании почему Вы задействуете в этом месте именно этот способ, инструмент, подход. А? (Это не работа на публику - это попытка разобраться в самом себе - программинг - это сначала медитация, потом - кучка деталек, связанных болтиками, гаечками, шпонками, шпильками и прочей мелочёвкой). Делаем?

The algorithm is there. And it works. I am just learning, so I take the code from the tutorial and modify it to suit my needs.

The Expert Advisor template, which in its current state should simply detect what is happening in the terminal and display all events on the screen in the indicator window Inform

//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
//=================== ПОДКЛЮЧЕНИЕ ВНЕШНИХ МОДУЛЕЙ ================
//--------------------------------------------------------------- 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;
   }
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж

Terminal - takes into account all open positions and set orders:

//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
/*
Соответствие элементов массивов 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(),   // Курс SL
                                                  Digits); 

         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;//();
   }
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж