[¡AVISO CERRADO!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen. No puedo ir a ningún sitio sin ti. - página 546

 
drknn >>:

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

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

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

P.S.

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

______________________________________________________________________________________________________________________________________________________________________

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

 

TheXpert писал(а) >>

Mentira.


Piénsalo: es psicológicamente difícil procesar la información si está repartida en varias páginas: tienes que saltar constantemente de un lado a otro hojeando el código para analizar la imagen completa. Pero un humano no es una liebre o una rana para hacerlo. Por supuesto, este no es el caso cuando el código consta de tres líneas, sino de algo más complicado.

 
drknn писал(а) >>

¿Un deslizamiento, tal vez?

¿Qué quiere decir con funcionamiento "automático"? ¿Qué quiere decir con "automático"?


Gracias, probablemente tengas razón... Aunque, si se trata de SL, es comprensible: la pérdida aumentará, pero ¿por qué TR reduce el beneficio? ¿debería ser mayor también?

Un "autómata" es un experto que trabaja por su cuenta.

 
¡Ayuda! Tratando de construir un EA primitivo con martin... Me aparece el error de apertura de pedido 131. ¿Qué ocurre?
Archivos adjuntos:
 
GVA63 >>:


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

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

Al parecer, la propagación salta.
 

artmedia70, volvemos al principio. Lo primero y más importante es el algoritmo. Es decir, cómo se supone que funciona el programa. Si no tienes una idea clara, no tienes un programa, porque no puedes hacer un código que no sabes cómo debe funcionar.

Analicemos línea por línea un fragmento de su código que no funciona correctamente. Pero vamos a desglosarlo desde el principio hasta el final. Es decir, será muy preciso a la hora de justificar por qué utiliza este método, herramienta o enfoque concreto. А? (Esta no es una obra para un público - es un intento de entenderse a sí mismo - la programación es primero meditación, luego - un montón de detalles, conectados por pernos, tuercas, espigas, clavijas y otras pequeñas cosas). ¿Haciendo?

 

¡¡¡Buenos días!!!

Estoy planeando usar OrderMagicNumber(), para hacer una función incorporada que lo calcule para cada vela específica, por lo que es deseable hacerlo único para cada vela y TF.
en particular no he encontrado una manera de pegar 2 variables
int Period( ) y
datetime Time[i]
para formar

xxxyyyyyy,
donde xxx son los minutos de Period( ), e yyyyyyy - segundos de Time[i]

¿cómo aplicarlo mejor?

Soy un principiante :)

 
Gravitus >>:

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

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

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

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

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


El periodo es una variable entera, aunque se puede empaquetar a un solo dígito, y ¿por qué necesitas una fecha-hora en magic? puedes averiguar la hora de apertura del pedido tal cual.
 
splxgf >>:

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

El objetivo es asignar un número mágico único para una vela dada en un marco de tiempo determinado, y debe ser diferente para 2 velas m15 y h1 con idéntico tiempo de apertura...

por lo que mi idea principal es conectarlo a los valores

Tiempo[] y

período( )

La practicidad visual del mago no es importante, me inclino a que sea un valor de formato int de 5-10 caracteres...

editar

----------

Básicamente ya he encontrado una manera... :)

 
drknn >>:

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

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

El algoritmo está ahí. Y funciona. Estoy aprendiendo, así que tomo el código del tutorial y lo modifico para adaptarlo a mis necesidades.

La plantilla del Asesor Experto, que en su estado actual debería simplemente detectar lo que está sucediendo en el terminal y mostrar todos los eventos en la pantalla en la ventana del indicador 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 - tiene en cuenta todas las posiciones abiertas y las órdenes establecidas:

//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
/*
Соответствие элементов массивов 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;//();
   }
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж