Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 945

 
Leo59:

Мне нужен ИСХОДНЫЙ КОД технического индикатора IMA, индикатора, который вызывается  в терминале MetaTrader4 по вкладке "Индикаторы -> Трендовые -> Moving Average

Теперь понятнее стало?

Зачем изобретать велосипед?

Сделайте, как в коде OsMA или любом другом: 

 

//+------------------------------------------------------------------+
//| Moving Average of Oscillator                                     |
//+------------------------------------------------------------------+
int OnCalculate (const int rates_total,
                 const int prev_calculated,
                 const datetime& time[],
                 const double& open[],
                 const double& high[],
                 const double& low[],
                 const double& close[],
                 const long& tick_volume[],
                 const long& volume[],
                 const int& spread[])
  {
   int i,limit;
//---
   if(rates_total<=InpSignalSMA || !ExtParameters)
      return(0);
//--- last counted bar will be recounted
   limit=rates_total-prev_calculated;
   if(prev_calculated>0)
      limit++;
//--- macd counted in the 1-st buffer
   for(i=0; i<limit; i++)
      ExtMacdBuffer[i]=iMA(NULL,0,InpFastEMA,0,MODE_EMA,PRICE_CLOSE,i)-
                    iMA(NULL,0,InpSlowEMA,0,MODE_EMA,PRICE_CLOSE,i);
//--- signal line counted in the 2-nd buffer
   SimpleMAOnBuffer(rates_total,prev_calculated,0,InpSignalSMA,ExtMacdBuffer,ExtSignalBuffer);
//--- main loop
   for(i=0; i<limit; i++)
      ExtOsmaBuffer[i]=ExtMacdBuffer[i]-ExtSignalBuffer[i];
//--- done
   return(0);
  }
//+------------------------------------------------------------------+

Или Вы категорически не доверяете Метаквотам? 

 

Всем привет. На 943 странице выкладывал скрипт по поводу описания работы и примеров работы  библиотек *dll. Немного разобрался, почему скрипт не работает.

 1. #include<WinUser32.mqh> не нужен в данном случае.

 2. Условие отдельно if(lastkey != 0) Alert("lastkey=",lastkey); стабильно правильно выдает код нажатой клавиши. Если сделать задержку, вопросов к работе не останется.

 3. Условие отдельно if(lastmouse != 0) Alert("lastmouse=",lastmouse); стабильно выдает 512, даже если мышь не двигается. Очень редко проскакивают другие цифры

    в ответ на нажатие кнопок мыши.

4. if(lastwnd != 0) Alert("lastwnd=",lastwnd); возвращает пустую строку, скорей всего потому, что библиотека старая, не юникод.

В справке читал, что в редакторе можно работать с библиотеками  *dll, достаточно мышкой перетащить ее в окно редактора. Не открывается.

Вопрос. Готов кто-то помочь править "IdleLib.dll" или лучше за деньги. Если где-то есть эта тема(и другие  *dll) покажите ссылку.

 
подскажите пожалуйста ,как  в советнике прописать (после определенного события) запрет на AutoTrading ,то есть программно перевести кнопку терминала AutoTrading в запрет. Я пробовал вызывать константу  ACCOUNT_TRADE_ALLOWED  и менять ее значение на false , но компилятор пишет ,что это не будет иметь эффекта ( ACCOUNT_TRADE_ALLOWED == false; //expression has not effect)
 
Попробуй так


#import "user32.dll"
int GetForegroundWindow();
int  PostMessageW(int  hWnd, int  Msg, int  wParam, string lParam);
#import
#define WM_COMMAND                    0x0111

после определенного события PostMessageW(GetForegroundWindow(), WM_COMMAND, 33020, (string)0);
 
amavladi:
подскажите пожалуйста ,как  в советнике прописать (после определенного события) запрет на AutoTrading ,то есть программно перевести кнопку терминала AutoTrading в запрет. Я пробовал вызывать константу  ACCOUNT_TRADE_ALLOWED  и менять ее значение на false , но компилятор пишет ,что это не будет иметь эффекта ( ACCOUNT_TRADE_ALLOWED == false; //expression has not effect)

Эта задача (запретить советнику торговать) очень легко решается семафорами (true/false.... разрешить/запретить торговать).

Или так важно именно отжать кнопку "Авто торговля"? 

 
charter:

Эта задача (запретить советнику торговать) очень легко решается семафорами (true/false.... разрешить/запретить торговать).

Или так важно именно отжать кнопку "Авто торговля"? 

 Cпасибо за ответ.Если не получится запрещать AutoTrading для всего терминала, то конечно так и буду делать. Дело в том ,что у меня на терминале работают несколько Советников и я 

 хотел отдельным советником следить за Equity и  на случай нештатных ситуаций  запрещать Авто торговлю всем советникам одновременно, например при спуске  Aquity на 50%

 
amavladi:

 Cпасибо за ответ.Если не получится запрещать AutoTrading для всего терминала, то конечно так и буду делать. Дело в том ,что у меня на терминале работают несколько Советников и я 

 хотел отдельным советником следить за Account Profit и  на случай нештатных ситуаций  запрещать Авто торговлю всем советникам одновременно, например при спуске  Account Profit на 50%

 

Я чуток не проверил. Для того чтобы работало надо заменить WinUser32.mqh на прикреплённый.

Теперь проверено, работает. И вот ещё некоторые прибамбасы

#include <WinUser32.mqh>

void OnTick()
{
 после определенного события wCommands(20); 
}

void wCommands(int com)
{
switch(com)
{
case  1:        PostMessageA(WindowHandle(Symbol(), Period()), WM_COMMAND, 33137, (string)0); return; //M1 |
case  2:        PostMessageA(WindowHandle(Symbol(), Period()), WM_COMMAND, 33138, (string)0); return; //M5 |
case  3:        PostMessageA(WindowHandle(Symbol(), Period()), WM_COMMAND, 33139, (string)0); return; //M15 |
case  4:        PostMessageA(WindowHandle(Symbol(), Period()), WM_COMMAND, 33140, (string)0); return; //M30 |
case  5:        PostMessageA(WindowHandle(Symbol(), Period()), WM_COMMAND, 33135, (string)0); return; //H1 |
case  6:        PostMessageA(WindowHandle(Symbol(), Period()), WM_COMMAND, 33136, (string)0); return; //H4 |
case  7:        PostMessageA(WindowHandle(Symbol(), Period()), WM_COMMAND, 33134, (string)0); return; //D1 |
case  8:        PostMessageA(WindowHandle(Symbol(), Period()), WM_COMMAND, 33141, (string)0); return; //W1 |
case  9:        PostMessageA(WindowHandle(Symbol(), Period()), WM_COMMAND, 33334, (string)0); return; //MN |
case 10:        PostMessageA(WindowHandle(Symbol(), Period()), WM_COMMAND, 33050, (string)0); return; //Удалить эксперт |
case 11:        PostMessageA(WindowHandle(Symbol(), Period()), WM_COMMAND, 35426, (string)0); return; //Удалить скрипт |
case 12:        PostMessageA(WindowHandle(Symbol(), Period()), WM_COMMAND, 57602, (string)0); return; //Закрыть окно текушего графика |
                                                                           57604              //Сохранить как
                                                                           57607              //Вызов диспетчера печати
                                                                           57608              //Печать графика
                                                                           57609              //Предварительный просмотр
case 13:        PostMessageA(WindowHandle(Symbol(), Period()), WM_COMMAND, 33048, (string)0); return; //Вызов свойств экстерта |
case 14:        PostMessageA(WindowHandle(Symbol(), Period()), WM_COMMAND, 33157, (string)0); return; //Вызов свойств графика |
case 15:        PostMessageA(WindowHandle(Symbol(), Period()), WM_COMMAND, 33025, (string)0); return; //Увеличение масштаба |
case 16:        PostMessageA(WindowHandle(Symbol(), Period()), WM_COMMAND, 33026, (string)0); return; //Уменьшение масштаба |
case 17:        PostMessageA(WindowHandle(Symbol(), Period()), WM_COMMAND, 33018, (string)0); return; //Переключение на бары |
case 18:        PostMessageA(WindowHandle(Symbol(), Period()), WM_COMMAND, 33019, (string)0); return; //Переключение на свечи |
case 19:        PostMessageA(WindowHandle(Symbol(), Period()), WM_COMMAND, 33022, (string)0); return; //Переключение на линию |

case 20:        PostMessageA(GetForegroundWindow(), WM_COMMAND, 33020, (string)0); return; //Переключение кнопки советника |
case 21:        PostMessageA(GetForegroundWindow(), WM_COMMAND, 35429, (string)0); return; //Окно логина и пароля |
case 22:        PostMessageA(GetForegroundWindow(), WM_COMMAND, 37400, (string)0); return; //Пересканировать сервера |
case 23:        PostMessageA(GetForegroundWindow(), WM_COMMAND, 35403, (string)0); return; //Глобальные переменные |
case 24:        PostMessageA(GetForegroundWindow(), WM_COMMAND, 35419, (string)0); return; //Список индикаторов |
case 25:        PostMessageA(GetForegroundWindow(), WM_COMMAND, 33265, (string)0); return; //Открывает окно настройки |
case 26:        PostMessageA(GetForegroundWindow(), WM_COMMAND, 33262, (string)0); return; //Архив катировак |
case 27:        PostMessageA(GetForegroundWindow(), WM_COMMAND, 33309, (string)0); return; //Обзор рынка |
case 28:        PostMessageA(GetForegroundWindow(), WM_COMMAND, 33310, (string)0); return; //Навигатор |
case 29:        PostMessageA(GetForegroundWindow(), WM_COMMAND, 33314, (string)0); return; //Терминал |
case 30:        PostMessageA(GetForegroundWindow(), WM_COMMAND, 33315, (string)0); return; //Тестер стратегий |
}
}


А предыдущий пост я подправил так чтобы работало без замены WinUser32.mqh

Файлы:
winuser32.mqh  71 kb
 

Приветствую всех... Знамо проблема в следующем. Когда компилирую код то переменная d принимает значение 110 и при этом индикатор отображает всё правильно, но с приходом нового бара, переменная становиться 109 и соотвественно полностью херется все показания индикатора. Я уже заиПался..... Что за херня????

 

int start()
  {
  int limit,Val,Oi;
  
   drawonce();
//limit=Bars;
if (b!=Bars){
b=Bars;
datetime ldt_BeginDay = iTime (NULL, PERIOD_D1,Q); 
int li_Bar = iBarShift (NULL, 0, ldt_BeginDay);
d=0;

 for(int i=li_Bar-10; i>=0; i--){  
 
 
if (curDay!=TimeDay(Time[i])) {

curDay=TimeDay(Time[i]);
OOO=iClose(NULL,PERIOD_D1,Q-d+1)-iOpen(NULL,PERIOD_D1,Q-d+1);
if (volarr[Q-d]!=0) Val=volarr[Q-d]-volarr[Q-d+1];
if (oiarr[Q-d]!=0)  Oi=oiarr[Q-d]-oiarr[Q-d+1];
d++;
}
Buffer1[i]=Val;
Buffer2[i]=Oi;
Buffer3[i]=OOO;

}   
   
   
}
   
   WindowRedraw();
   Comment(Q,"   ",d);
   return(0);
  }

 Почему при компилировании одно значение переменно, а с приходом нового бара переменная меняется?????

 
Ну что..... в моём случае даже профессионалы без сильны????
 
Может кто ни будь объяснить в чём разница между компилирование и приходом нового бара????