[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 546

 
drknn >>:

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

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

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

P.S.

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

______________________________________________________________________________________________________________________________________________________________________

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

 

TheXpert писал(а) >>

Stronzate.


Pensateci - è psicologicamente difficile elaborare le informazioni se sono sparse su diverse pagine - avete bisogno di saltare costantemente avanti e indietro sfogliando il codice per analizzare l'intero quadro. Ma un umano non è una lepre o una rana per farlo. Naturalmente, questo non è il caso quando il codice consiste di tre righe, ma di qualcosa di più complicato.

 
drknn писал(а) >>

Scivolamento, forse?

Cosa intende per funzionamento "automatico"? Cosa intende per "automatico"?


Grazie, probabilmente hai ragione... Anche se, se SL, è comprensibile - la perdita aumenterà, ma perché TR riduce il profitto? dovrebbe anche essere più grande?

Un "automa" è un esperto che lavora da solo.

 
Aiuto! Cercando di costruire un EA primitivo con martin... Ricevo l 'errore 131 di apertura dell'ordine, cosa c'è che non va?
File:
 
GVA63 >>:


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

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

A quanto pare lo spread salta.
 

artmedia70, siamo di nuovo al punto di partenza. La prima e più importante cosa è l'algoritmo. Cioè, come il programma dovrebbe funzionare. Se non hai un'idea chiara, non hai un programma, perché non puoi fare del codice che non sai come dovrebbe funzionare.

Analizziamo una linea alla volta un frammento del vostro codice che non funziona correttamente. Ma andiamo a scomporre il tutto dall'inizio alla fine. Cioè, sarete molto precisi nel giustificare perché usate questo particolare metodo, strumento o approccio. А? (Questo non è un lavoro per un pubblico - questo è un tentativo di capire se stessi - la programmazione è prima la meditazione, poi - un mucchio di dettagli, collegati da bulloni, dadi, tasselli, perni e altre piccole cose). Fare?

 

Buona giornata!!!

Ho intenzione di usare OrderMagicNumber(), per fare una funzione integrata per calcolarlo per ogni candela specifica, quindi è auspicabile renderlo unico per ogni candela e TF.
in particolare non ho trovato un modo per incollare insieme 2 variabili
int Period( ) e
datetime Time[i]
per formare

xxxyyyyyyyyy,
dove xxx è minuti da Period( ), e yyyyyyyy - secondi da Time[i]

come implementarlo meglio?

Sono proprio un principiante :)

 
Gravitus >>:

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

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

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

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

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


Il periodo è una variabile intera, anche se può essere impacchettata a una sola cifra, e perché avete bisogno di un datetime in magic? potete scoprire il tempo di apertura dell'ordine così com'è.
 
splxgf >>:

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

L'obiettivo è di assegnare un numero magico unico per una data candela in un dato timeframe, e dovrebbe essere diverso per 2 candele m15 e h1 con tempo di apertura identico...

quindi la mia idea principale è di collegarla ai valori

Tempo[] e

periodo( )

la praticità visiva del mago non è importante, sono propenso a farne un valore in formato int di 5-10 caratteri...

edit

----------

Fondamentalmente ho già trovato un modo... :)

 
drknn >>:

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

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

L'algoritmo è lì. E funziona. Sto solo imparando, quindi prendo il codice dal tutorial e lo modifico in base alle mie esigenze.

Il modello Expert Advisor, che nel suo stato attuale dovrebbe semplicemente rilevare ciò che sta accadendo nel terminale e visualizzare tutti gli eventi sullo schermo nella finestra dell'indicatore.

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

Terminale - tiene conto di tutte le posizioni aperte e degli ordini impostati:

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