[AVISO FECHADO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Não posso ir a lugar algum sem você. - página 546

 
drknn >>:

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

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

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

P.S.

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

______________________________________________________________________________________________________________________________________________________________________

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

 

TheXpert писал(а) >>

Besteira.


Pense nisso - é psicologicamente difícil processar informações se elas estiverem espalhadas por várias páginas - você precisa pular constantemente para frente e para trás folheando o código para analisar o quadro completo. Mas um humano não é uma lebre ou um sapo para fazer isso. É claro que este não é o caso quando o código consiste em três linhas, mas algo mais complicado.

 
drknn писал(а) >>

Slippage, talvez?

O que você quer dizer com operação "automática"? O que você quer dizer com "automático"?


Obrigado, você provavelmente está certo... Embora, se SL, é compreensível - o prejuízo aumentará, mas por que TR reduz o lucro? deveria ser maior também?

Um "autômato" é um especialista que trabalha por conta própria.

 
Socorro! Tentando construir uma EA primitiva com martin... Recebo ordem aberto erro 131? o que está errado?
Arquivos anexados:
 
GVA63 >>:


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

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

Aparentemente, os saltos de dispersão.
 

artmedia70, estamos de volta à estaca zero. A primeira e mais importante coisa é o algoritmo. Isto é, como o programa deve funcionar. Se você não tem uma idéia clara, você não tem um programa, porque não pode fazer código que não sabe como deve funcionar.

Vamos analisar uma linha de cada vez um fragmento de seu código que não funciona corretamente. Mas vamos quebrar desde o início até o fim. Ou seja, você será muito preciso para justificar por que você usa este método, ferramenta ou abordagem específica. А? (Isto não é um trabalho para um público - é uma tentativa de entender a si mesmo - a programação é primeiro a meditação, depois - um monte de detalhes, conectados por parafusos, porcas, cavilhas, pinos e outras pequenas coisas). Fazendo?

 

Bom dia!!!

Estou planejando usar OrderMagicNumber(), para fazer uma função integrada para calculá-lo para cada candelabro específico, portanto é desejável torná-lo único para cada candelabro e TF.
em particular não encontrei uma maneira de colar 2 variáveis
int Period( ) e
datetime Time[i]
para formar

xxxyyyyyyyyy,
onde xxx é minutos de Period( ), e yyyyyyyyyy - segundos de Time[i]

como implementá-la melhor?

Eu sou tão iniciante :)

 
Gravitus >>:

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

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

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

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

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


O período é uma variável inteira, embora possa ser embalada em um único dígito, e por que você precisa de uma data em magia? você pode descobrir a hora de abertura do pedido como ela é.
 
splxgf >>:

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

O objetivo é atribuir um número mágico único para uma determinada vela em um determinado período de tempo, e deve ser diferente para 2 m15 e h1 velas com tempo aberto idêntico...

então minha idéia principal é conectá-la a valores

Tempo[] e

período( )

a praticidade visual do mágico não é importante, estou inclinado a torná-lo um valor de formato int de 5-10 caracteres...

editar

----------

Basicamente, já encontrei uma maneira... :)

 
drknn >>:

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

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

O algoritmo está lá. E funciona. Estou apenas aprendendo, então pego o código do tutorial e o modifico para adequá-lo às minhas necessidades.

O modelo Expert Advisor, que em seu estado atual deve simplesmente detectar o que está acontecendo no terminal e exibir todos os eventos na tela na janela indicadora Informar

//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
//=================== ПОДКЛЮЧЕНИЕ ВНЕШНИХ МОДУЛЕЙ ================
//--------------------------------------------------------------- 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 - leva em conta todas as posições em aberto e ordens definidas:

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