Ваши вопросы по языку MQL4

sergeysv

Активный участник
на скайп звякнуть?
Домашние на боковой--последний раз они так в онлайне порешали...мама не горюй:)))
Нюансов нет -есть проблема расчета--сложить риск всех открытых ордеров в % .
Total_RISK += ...
Вроде всё гуд по коду а считает не верно...Почему убыток в 12$ *100/15985=0.07.. а показывает 0.05...?
П.С. От скуки помогает ...иногда
youtube.com/user/pelmeniTV
 
Последнее редактирование модератором:

vladradon

Программист
Вроде всё гуд по коду а считает не верно...Почему убыток в 12$ *100/15985=0.07.. а показывает 0.05...?
П.С. От скуки помогает ...иногда
Иногда глюки в расчетах появляются откуда не ждешь. Сам только вот на днях целый час убил в поиске глюка - все оказалось элементарно просто - в расчетах, где (к примеру) участвуют целые и дробные числа, лучше расчет вести в дробных. Т.е. строка типа
Profit1=(int)((Volat1+Volat2)/2/100*ProfitAuto); будет исключать из результата дробную часть расчета, а если тупо ту же двойку прописать как дробную
Profit1=(int)((Volat1+Volat2)/2.0/100*ProfitAuto)
то расчет уже будет без потери дробной части. Но это нужно смотреть по коду - я не могу не видя кода что-то утверждать.
 

sergeysv

Активный участник
час убил в поиске глюка
На моём уровне дни уходят...:)
Есть проблема расчета--сложить риск всех открытых ордеров в % .
Почему убыток в 12$ *100/15985=0.07.. а Total_RISK += показывает 0.05...?
Баи заглушил пока...
int i, nb = 0, ns = 0;
double buys_volume = 0.0, sells_volume = 0.0;
double Total_Volume = 0.0, Total_RISK= 0.0;
double buys_list[50][3];
double sells_list[50][3];
if (Point == 0.00001) Poin = 0.0001; //5 digits
else if (Point == 0.001) Poin = 0.01; //3 digits
else Poin = Point; //Normal
double spreadtot,spreadtotoff;
spreadtot = MarketInfo(Symbol(), MODE_SPREAD);
if ((Poin > Point) && (normal_pips_Spred))
{ divider = 10.0;
n_digits = 1;
}
spreadtotoff=(OrderLots()*spreadtot/divider);
for(i = 0; i < OrdersTotal(); i++)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false) continue;
if(OrderType() == OP_BUY)
{
buys_list[nb][0] = OrderTicket();
buys_list[nb][1] = OrderProfit();
buys_list[nb][2] = OrderLots();
buys_volume += buys_list[nb][2];
/* Total_RISK += NormalizeDouble (((((OrderStopLoss() - OrderOpenPrice())/Point)*
MarketInfo(Symbol(), (MODE_TICKVALUE) )*OrderLots()) + ((OrderLots()*OrderCommission())+spreadtotoff))
*100 /AccountBalance(),2); */
nb++;
}
if(OrderType() == OP_SELL)
{
sells_list[ns][0] = OrderTicket();
sells_list[ns][1] = OrderProfit();
sells_list[ns][2] = OrderLots();
sells_volume += sells_list[ns][2];
Total_RISK += NormalizeDouble (((((OrderOpenPrice() - OrderStopLoss())/Point)*
MarketInfo(Symbol(), (MODE_TICKVALUE))*OrderLots()) + ((OrderLots()*OrderCommission())+spreadtotoff))
*100 /AccountBalance(),2);
ns++;
}
}
 
Последнее редактирование:

vladradon

Программист
Есть проблема расчета--сложить риск всех открытых ордеров в %
Мне не совсем понятно зачем ты умножил комиссию ордера на его лот OrderLots()*OrderCommission() - функция OrderCommission() возвращает уже рассчитанное значение от лота ордера.
Вроде все правильно считает. Единственное, добавил проверку на ненулевой стоплосс ордера, иначе полный бред получается.
 

Вложения

  • test.mq4
    1,7 КБ · Просмотры: 13
Последнее редактирование:

sergeysv

Активный участник
возвращает уже рассчитанное значение
В таком варианте не хватает 0.02%--в других вариантах или по нулям или по 0.01 на ордер...Было вчера....
Сейчас поверяю вроде то что надо...Но не факт...
Благодарю:)
 

vladradon

Программист
В таком варианте не хватает 0.02%--в других вариантах или по нулям или по 0.01 на ордер...Было вчера....
Сейчас поверяю вроде то что надо...Но не факт...
Благодарю
Я в тесте заложил вариант с MarketInfo, а она возвращает значение double и значит потерь быть не должно. Блин, пока проверял на демке наугад выставил несколько ордеров и успел 72$ заработать... жаль, что на демке.:D
 

warwick

Активный участник
Подскажите где могут находится логи индикаторов??? Индикатор показывает старую просадку, вчерашнюю а не за сегодня. AccountEquityAnalyzerv2. Удалял его из терминала и устанавливал заново, но просадка осталась вчерашней.
 

vladradon

Программист
Подскажите где могут находится логи индикаторов??? Индикатор показывает старую просадку, вчерашнюю а не за сегодня. AccountEquityAnalyzerv2. Удалял его из терминала и устанавливал заново, но просадка осталась вчерашней.
Можно индикатор посмотреть? В поисковике сходу этого индикатора не нашел. Есть общий лог терминала, в котором все последние действия всех программ и ручного управления сохраняются. Но если в программе заложен какой-то алгоритм, который где-то прописывается, то в терминальном логе его скорее всего нет. Короче нужен индикатор, чтобы что-то по нему сказать.
 

warwick

Активный участник
Можно индикатор посмотреть? В поисковике сходу этого индикатора не нашел. Есть общий лог терминала, в котором все последние действия всех программ и ручного управления сохраняются. Но если в программе заложен какой-то алгоритм, который где-то прописывается, то в терминальном логе его скорее всего нет. Короче нужен индикатор, чтобы что-то по нему сказать.

Он в ex4. Нужен? В mq4 не видел
 

vladradon

Программист
Он в ex4. Нужен? В mq4 не видел
Ну... посмотреть можно и может понять его алгоритм. А может проще что-то подобное найти или написать. В чем его уникальность? Мало информации, чтобы какой-то анализ сделать. Если не хотите его выкладывать, то можете мне в скайп позвонить сейчас и сделать демо экрана с работой индикатора, чтобы я мог что-то понять по его работе.
 

warwick

Активный участник
Ну... посмотреть можно и может понять его алгоритм. А может проще что-то подобное найти или написать. В чем его уникальность? Мало информации, чтобы какой-то анализ сделать. Если не хотите его выкладывать, то можете мне в скайп позвонить сейчас и сделать демо экрана с работой индикатора, чтобы я мог что-то понять по его работе.

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

Вложения

  • AccountEquityAnalyzerv2.ex4
    7,4 КБ · Просмотры: 15

vladradon

Программист
Да мне вообще нужно только одно. Максимальная просадка в цифрах. Всё, больше ничего. Был у меня такой простой и есть, но не помню где и как называется. Просто знать какая за сегодня была просадка
Я не понимаю, зачем в этой ветке нужно было задавать такой вопрос. Можно было в любом поисковике набрать что-то типа "MQL индикатор статистики" - их вагон от разных прогеров в том числе и на этом портале. Если вам лень тупо поковыряться в инете для себя любимого, то кому же захочется стараться ради вас. Это был риторический вопрос.
Еще на этом портале есть отдельная тема для ищущих :
https://forexsystemsru.com/sovetnik...kto-ischet-pishem-zdes`]-346.html#post1330423
 

warwick

Активный участник
Я не понимаю, зачем в этой ветке нужно было задавать такой вопрос. Можно было в любом поисковике набрать что-то типа "MQL индикатор статистики" - их вагон от разных прогеров в том числе и на этом портале. Если вам лень тупо поковыряться в инете для себя любимого, то кому же захочется стараться ради вас. Это был риторический вопрос.
Еще на этом портале есть отдельная тема для ищущих :
https://forexsystemsru.com/sovetnik...kto-ischet-pishem-zdes`]-346.html#post1330423

Вопрос я задал потому что интересно где хранится лог индикатора. Откуда берет информацию по вчерашней просадке, если в истории только за сегодня и индикатор удален и заново загружен в терминал.
---------------
А на счет поиска естественно я сначало в гугл лезу. Ничего толкового не нашел. Удивительно, видать никому не нужно.
Еще на этом портале есть отдельная тема для ищущих :
https://forexsystemsru.com/sovetnik...kto-ischet-pishem-zdes`]-346.html#post1330423

Так я написал там позавчера? ноль ответа.
 

vladradon

Программист
Вопрос я задал потому что интересно где хранится лог индикатора.
Скорее всего он (индикатор) выдает инфу на основе статистики по последним сделкам на данном счете. Никаких логов он не пишет - он (индикатор) достаточно примитивен, чтобы его разработчик заморачивался сохранением инфы - все просчитывается и индицируется стандартными функциями из MQL, работающими с историей сделок. Если вопрос только в просмотре статистики, то это совсем не сложно. Давай так: я напишу для тебя код по твоим запросам как ты хочешь это видеть, но только в онлайне в скайпе. Я не могу рекламмировать в данной теме свои или тем более разработки коллег.
 
Последнее редактирование:

warwick

Активный участник
Давай так: я напишу для тебя код по твоим запросам как ты хочешь это видеть, но только в онлайне в скайпе. Я не могу рекламировать в данной теме свои или тем более разработки коллег.

Спасибо, не нужно время тратить на это, поищу еще.
 

gince

Местный знаток
Инди рисует верхние и нижние уровни. Хочу чтобы верхнего шел нижний, а промежуточные (нижний-нижний)не рисовались, т.е. рисуется первый верхний и первый верхний.
Проовал это делать, но где то ошибаюсь в логике.
Код:
//                                                                            AGM Levels
//______________________________________________________________________________________
#property indicator_chart_window

extern   string pref="AGM1.3_";
#define   label "AGM1.3"
//extern bool maFiltr=true;
//extern int maPer=100;
//extern ENUM_MA_METHOD maMethod=1;
//extern ENUM_APPLIED_PRICE maPrice=0;
//extern int    Nbars       = 3;
extern color  ColorHigh   = clrRed;
extern color  ColorLow    = clrAqua;
extern int    LineWidth   = 3;
extern int    HistoryBars = 300;

bool UP_pre=false;
bool DOWN_pre=false;
bool UP=false;
bool DOWN=false;

int    limit;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
/*IndicatorDigits(Digits);
   IndicatorBuffers(4);
   SetIndexBuffer(0,Green1);
   SetIndexBuffer(1,Yellow2);
   SetIndexBuffer(2,White3);
   SetIndexBuffer(3,Red1);
*/
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int deinit()
  {
   LEVELS_delete();

   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void LEVELS_delete()
  {
   string name;
   for(int s=ObjectsTotal()-1; s>=0; s--)
     {
      name=ObjectName(s);
      if(StringSubstr(name,0,StringLen(pref))==pref) ObjectDelete(name);
      if(StringSubstr(name,0,StringLen(label))==label) ObjectDelete(name);
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   int  i,BarsCount=IndicatorCounted();
   string name,ZoneColor;


   if(BarsCount<0) return(-1);
   if(BarsCount>0) BarsCount--;
   limit=MathMin(Bars-BarsCount,HistoryBars);

   for(i=limit; i>=0; i--)
     {
      UP=High[i+2]<=High[i+1] && 
         //High[i+1]<=High[i+0] &&
         //Low[i+2] <=Low[i+1]  &&
         High[i+2]<=Low[i+0];

      DOWN=Low[i+2]>=Low[i+1] && 
           //Low[i+1] >=Low[i+0] && 
           //High[i+2]>=High[i+1]&& 
           Low[i+2]>=High[i+0];

      if(UP /*&& !UP_pre*/)
        {
         DrawLines("RED_"+TimeToStr(Time[i])+"-"+IntegerToString(i),Time[i+2],High[i+2],LineWidth,ColorHigh);
         UP_pre=true;
         UP=false;
        }
      else
        {
         ObjectDelete(pref+"RED_"+TimeToStr(Time[i])+"-"+IntegerToString(i));
        }
      if(DOWN /*&& !DOWN_pre*/)
        {
         DrawLines("GREEN_"+TimeToStr(Time[i])+"-"+IntegerToString(i),Time[i+2],Low[i+2],LineWidth,ColorLow);
         DOWN_pre=true;
         DOWN=false;
        }
      else
        {
         ObjectDelete(pref+"GREEN_"+TimeToStr(Time[i])+"-"+IntegerToString(i));
        }
     }
   return(0);
  }
//  ---- end
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool DrawLines(string name,datetime time,double price,int width,color LColor)
  {
   int s=iBarShift(NULL,_Period,time);
   if(!ObjectCreate(pref+name,OBJ_TREND,0,time,price,Time[s-2],price)) return(false);
   ObjectSet(pref+name,OBJPROP_COLOR,LColor);
   ObjectSet(pref+name,OBJPROP_WIDTH,width);
   ObjectSet(pref+name,OBJPROP_RAY_RIGHT,false);
   return(true);
  }
//+------------------------------------------------------------------+
 

MrGreen86

Гуру форума
Инди рисует верхние и нижние уровни. Хочу чтобы верхнего шел нижний, а промежуточные (нижний-нижний)не рисовались, т.е. рисуется первый верхний и первый верхний.
Проовал это делать, но где то ошибаюсь в логике.

подозреваю что у вас много опечаток в тексте. Исправьте его чтобы стало понятно что вам нужно. По возможности сделайте скриншот с пояснением. И код прикладывайте файлом а не цитатой.
 

gince

Местный знаток
подозреваю что у вас много опечаток в тексте. Исправьте его чтобы стало понятно что вам нужно. По возможности сделайте скриншот с пояснением. И код прикладывайте файлом а не цитатой.

Надо видеть только первую с лева синюю или красную
 

Вложения

  • ind1.3.png
    ind1.3.png
    18,8 КБ · Просмотры: 57

gince

Местный знаток
Помогите. Я в индикаторе уже начал делать. Сделал дополнительные переменные UP_pre и DOWN_pre . В них хотел видеть последний бывший сигнал, но что то не так.
 
Верх