[АРХИВ]Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 5. - страница 313

 
hoz:

 Как сделать так, чтоб при передаче в данную функцию параметра trend который будет отвечать за передачу предполагаемого основного тренда в данный момент, дальше расчёт вёлся уже исходя из этого параметра.

 Т.е. если trend == вниз, то функция в цикле была как щяс, а если trend == вверх, то в цикле было есс-но Open[i] и Close[i] поменены местами, чтоб соблюдались условия. Т.к. в том случае уже цена закрытия бара будет ниже цены открытия и в итоге разница будет со знаком минус.


bool trend;

if ((2*trend-1)*Δ=>const) cnt++;
if ((2*trend-1)*Δ<const) cnt=0;
Тогда 2*trend-1 принимает значения +1 и -1, т.е. если trend=true это будет вверх, а trend=false - вниз, а Δ соответственно будет браться с прямым или обратным знаком. Вот как раз пример, когда математика заменяет дебри if.
 

gyfto, у Вас тестовый скрипт из комплекта работает?

Я бы так сделал:

//в шапке
#include <SharedMemoryMT4.mqh>
//в инит. Создание и открытие не обязательно. Эти функции для ускорения работы с памятью.
MemoryCreate(1, "", NULL, -1, "ind", 60*GlobalVariableGet("ADXBars"));
// Вариант более быстрый, чем выше:
MemoryCreateProjection(1, "", NULL, -1, "ind", 60*GlobalVariableGet("ADXBars"));

//в деинит
MemoryCloseName(1, "", "ind");
//в старт вместо 
for(; i<Σ; i++) MemoryWriteInt(1, "", -1, "ind", i * 4, iBars(sn, 1));//ind[i]=iBars(sn, 1);
#property show_inputs
#include <SharedMemoryMT4.mqh>
extern int x;//сколько секунд назад с данного момента прикрепления смотрим значения TOLHCV

int init()
  {
//   MemoryOpen(1, "", -1, "ind"); // Это не требуется.
   return(0);
  }
int start()
  {
   //MemoryReadInt(1, "", -1, "ind", i) это ind[i], GlobalVariableGet("final") это последний элемент в массиве, а ф-ла выглядит так: n=ind[final]-ind[final-x]+1
   int n=MemoryReadInt(1, "", -1, "ind", GlobalVariableGet("final"))-MemoryReadInt(1, "", -1, "ind", GlobalVariableGet("final")-x)+1;
   Alert(TimeToStr(TimeCurrent(),TIME_SECONDS), ": Time=", TimeToStr(Time[n], TIME_SECONDS), ", Open=", Open[n], ", High=", High[n], ", Low=", Low[n], ", Close=", Close[n], ", Volume=", Volume[n]);
   return(0);
  }

Остальное правильно. Не вникал только в протокол передачи данных.

Создание, открытие и выделения памяти не обязательны. Эти функции для ускорения работы с памятью. Для самой простой работы с библиотекой нужны только функции чтения и записи. Остальное библиотека сама сделает. При чём, читать можно ещё до записи. Будет выделена память в размере затребованной и функция вернёт ноль. Так, как там ещё ничего нет.

 

Zhunko, кажется нет. Comment() не выводит, пишет только в лог, в логе:

15:51:13 Check_SharedMemoryMT4.dll AUDUSD,M1 inputs: Area=1; InitPrefix=""; UserGlobal=25; UserTerminal=50; UserWindow=100; CheckWriteRead=false; CheckWrite=false; CheckRead=false; CheckGeneral=false
CheckProjection=false; CheckClose=false; NamePrefix="Check"; NameMemory0="CheckMemory0"; NameMemory1="CheckMemory1"; NameMemory2="CheckMemory2"; NameMemory3="CheckMemory3"; NameMemory4="Memory4"
Index=-1; StartByte=0; MemorySize=64000; bValue=true; cValue=123; ucValue=255; shValue=32100; ushValue=65535; nValue=2147012345; fValue=1234.56789012; dValue=1234.56789012; sValue0="Контроль = 1234.56789"
sValue1="Контроль = 9876.54321"; sValue2="Привет мир!!!"; sValue3="Миру мир!"; sValue4="Неправильное  имя";

 Это всё в одну строку, я здесь перенёс чтобы не было здесь аномальной ширины экрана.

 
gyfto:

Zhunko, кажется нет. Comment() не выводит, пишет только в лог, в логе:

 Это всё в одну строку, я здесь перенёс чтобы не было здесь аномальной ширины экрана.

Видео посмотрите. Сделайте точно также. Если не работает, то будем разбираться. У меня работает.
 
Я наверное скоро конкурс выиграю  на самую глупейшую ошибку. У меня GV-переменная ADXBars объявлена не была, поэтому писалось "ошибка в методе". Плюс не было выравнивания по границе int. Но алерт всё равно выводит все нули, хоть с выравниванием, хоть без. Буду смотреть видео, буду сначала пытаться разобраться во всём самостоятельно. Не сумею - будем разбираться вместе.
 

TarasBY  artmedia70  hoz

Спасибо, господа офицеры!

 
CYBOPOB:

TarasBY  artmedia70  hoz

Спасибо, господа офицеры!

Что, застрелился? :)))
 
artmedia70:
Что, застрелился? :)))


Дважды 8-[
 

Здравствуйте! Помогите мне пожалуйста в этой теме:

https://www.mql5.com/ru/forum/144634

Большое спасибо!

 

У меня у самого ошибка эта долбаная вылезла. По сути, логики тут нет вообще. Для открытия отложенного ордера согласно требованиям https://book.mql4.com/ru/appendix/limits необходимо, чтоб цена открытия была либо ниже Бида (для продаж), либо выше Аска (для покупок). Делаю, всё согласно требованиям.

 

//+-------------------------------------------------------------------------------------+
//| Открытие длинной позиции                                                            |
//+-------------------------------------------------------------------------------------+
bool OpenBuy()
{
   int ticket = -1;
   double OOP = High[1] + i_thresholdToUp * pt;
   pr ("ND(OOP) = " + ND(OOP) + " ; Ask = " + Ask);

   if (ND(OOP) > Ask)
       ticket = OrderSend(Symbol(), OP_BUYSTOP, 0.1, ND(OOP), 3, 0, 0, NULL, i_magic, 0, CLR_NONE);
   else pr ("Ордер послать не удалось " + GetLastError());
   
   if (ticket > 0)
   {
       lastBarTime = Time[0];               // На текущем баре все необходимые действия..
                                            // .. успешно выполнены
       return (true);
   }
}

Периодически, появляется ошбика 0 и 130. Хотя 130-ая ошибка это ошибка неправильного стопа, которая может быть при модификации, а не при открытии ордера.

 На скрине ситуация и принт выведенный на экран по средством функции pr.

Косяковая ошибка стопа

 

Подскажите, пожалуйста, как избавиться от этого косяка. Мне эта ошибка уже очень надоела. Логически она вообще не по теме вылезла. 

Причина обращения: