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

AlexeyVik

Программист mql4 mql5
А пример, будьте добры, если не затруднит. :)
Ну так я дал пример. Единственная поправка это размерность массива не учёл.
Код:
 double Mass[2][2];
/********************Script program start function********************/
void OnStart()
{
 STORY(Mass);
 
 Print("Mass[0][0] ", Mass[0][0], " Mass[0][1] ", Mass[0][1], " Mass[1][0] ", Mass[1][0], " Mass[1][1] ", Mass[1][1]);
}/********************************************************************/

void STORY(double & arr[][])
{
   arr[0][0] = 1.0;
   arr[0][1] = 2.0;
   arr[1][0] = 10.0;
   arr[1][1] = 20.0;
}/********************************************************************/
А зачем тебе двухмерный массив? Ведь индекс и так присутствует.
 

egorr007

Новичок форума
Ну так я дал пример. Единственная поправка это размерность массива не учёл.

А зачем тебе двухмерный массив? Ведь индекс и так присутствует.

Ах, мне не нужен 2-х двумерный массив, мне нужна функция, Одна функция, а не n-е количество её копий..

Не могу пока, понять как это сделать, может кто то знает, как это сделать... поэтому к вам и обращаюсь. В среднем от неё мне нужно от500 до1500 значений. Что делать с вашим примером, даже не представляю.
 

egorr007

Новичок форума
//+-------------------------+ как сделать из такого:
(STORY18((STORY17((STORY16(STORY15(STORY14(STORY13(STORY12(STORY11(STORY10(STORY9(STORY8(STORY7(STORY6(STORY5(STORY4(STORY3(STORY2(STORY1(Bid)
))))))))))))))));
//+-------------------------+ такое:
STORY1(i,Bid);
 

Cemen4yk1

Местный житель
//+-------------------------+ как сделать из такого:
(STORY18((STORY17((STORY16(STORY15(STORY14(STORY13(STORY12(STORY11(STORY10(STORY9(STORY8(STORY7(STORY6(STORY5(STORY4(STORY3(STORY2(STORY1(Bid)
))))))))))))))));
//+-------------------------+ такое:
STORY1(i,Bid);
думаю както так можно примерно решить вашу задачу, но это мазохизм лютый :laugh:

PHP:
// вот чтото типа такого своял за 5 минут 
for(int i=0; i < 15; i++){//цикл количества повторений
//где i это сколько раз мы рассчитаем функцию от функии
for(int a=0; a <= 100; a++){//цикл заполнения
//AV[] - исходный массив с данными на 100 элементов
AV2[a] = iMAOnArray(AV,100,14,0,MODE_LWMA,a);
}
for(int c=0; c <= 100; c++){//цикл перезаполнения
AV[c] = AV2[c]}// перезаполнение в исходный массив(можно и через копирование)
}
 

egorr007

Новичок форума
В общем на объектах сделал.. STORY1(int index, int kod = -1); index - указанный объект в истории, kod - код объекта. Возвращает цену этого объекта или ноль.

За подсказки спасибо! рассматривал все варианты.:)
 
Последнее редактирование:

AlexeyVik

Программист mql4 mql5
Ах, мне не нужен 2-х двумерный массив, мне нужна функция, Одна функция, а не n-е количество её копий..

Не могу пока, понять как это сделать, может кто то знает, как это сделать... поэтому к вам и обращаюсь. В среднем от неё мне нужно от500 до1500 значений. Что делать с вашим примером, даже не представляю.
Каков вопрос, таков и ответ. В твоём вопросе был двухмерный массив, вернись и уточни о чём ты спрашивал.
 

egorr007

Новичок форума
Каков вопрос, таков и ответ. В твоём вопросе был двухмерный массив, вернись и уточни о чём ты спрашивал.
Согласен. Нужно более доходчиво объяснять. Со двора начал...
В общем для такого варианта нужен блок для хранения прошлых значений, а с объектами таким "блоком" выступает сам график.
На этом пока и остановился.
PHP:
      Comment("\n"
                   "price_0   ",(string) Get_index_Price_OBJ( 0 ,4 ),"\n"
                   "price_1   ",(string) Get_index_Price_OBJ( 1 ,4 ),"\n"
                   "price_2   ",(string) Get_index_Price_OBJ( 2 ,4 ),"\n"
                   "price_3   ",(string) Get_index_Price_OBJ( 3 ,4 ),"\n"
                   "price_4   ",(string) Get_index_Price_OBJ( 4 ,4 ),"\n"
                   "price_5   ",(string) Get_index_Price_OBJ( 5 ,4 ),"\n"
                   "price_6   ",(string) Get_index_Price_OBJ( 6 ,4 ),"\n"
                   "price_7   ",(string) Get_index_Price_OBJ( 7 ,4 ),"\n"
                   "price_8   ",(string) Get_index_Price_OBJ( 8 ,4 ),"\n"
               // "price_   ",(string) Get_index_Price_OBJ( индекс, код объекта ),"\n"

            );
 

Вложения

  • функция Get_index_Price_OBJ.txt
    1,5 КБ · Просмотры: 17

egorr007

Новичок форума
Такая картинка в общем.
 

Вложения

  • картинка.jpg
    картинка.jpg
    108,7 КБ · Просмотры: 36

gince

Местный знаток
Здравствуйте!
Написал мултивалютную и мултитаймфреймную функцию для определения нового бара. Подключил функцию в МТС и МТФ индикаторе для выдачи алерта при сигнале орин раз в течение бара.

bool f_isMTFMULTISY_NewBar0(string f_sy,int f_tf) { int tfIndex=-1; int sy_index=-1; string sym="";//---- switch(f_tf) { case 1 : tfIndex = 0; break; case 5 : tfIndex = 1; break; case 15 : tfIndex = 2; break; case 30 : tfIndex = 3; break; case 60 : tfIndex = 4; break; case 240 : tfIndex = 5; break; case 1440 : tfIndex = 6; break; case 10080: tfIndex = 7; break; default : tfIndex =-1; break; } if(sym=="AUDCAD")sy_index=0; else if(sym =="AUDCHF")sy_index=0; else if(sym =="AUDJPY")sy_index=1; else if(sym =="AUDNZD")sy_index=2; else if(sym =="AUDUSD")sy_index=3; else if(sym =="CADCHF")sy_index=4; else if(sym =="CADJPY")sy_index=5; else if(sym =="CHFJPY")sy_index=6; else if(sym =="EURAUD")sy_index=7; else if(sym =="EURCAD")sy_index=8; else if(sym =="EURCHF")sy_index=9; else if(sym =="EURGBP")sy_index=10; else if(sym =="EURJPY")sy_index=11; else if(sym =="EURNZD")sy_index=12; else if(sym =="EURUSD")sy_index=13; else if(sym =="GBPAUD")sy_index=14; else if(sym =="GBPCAD")sy_index=15; else if(sym =="GBPCHF")sy_index=16; else if(sym =="GBPJPY")sy_index=17; else if(sym =="GBPNZD")sy_index=18; else if(sym =="GBPUSD")sy_index=19; else if(sym =="NZDCAD")sy_index=20; else if(sym =="NZDCHF")sy_index=21; else if(sym =="NZDJPY")sy_index=22; else if(sym =="NZDUSD")sy_index=23; else if(sym =="USDCAD")sy_index=24; else if(sym =="USDCHF")sy_index=25; else if(sym =="USDJPY")sy_index=26; static int LastBar[8][26]= { 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0 }; datetime curbar=iTime(f_sy,f_tf,0); if(LastBar[tfIndex][sy_index]!=curbar) { LastBar[tfIndex][sy_index]=curbar; return (true); } else { return(false); } }
Но алерт работает при каждом новом тике. Не могу найти ошибку, помогите.
 

Вложения

  • gi_DB Stoch Break 20_80.mq4
    19,9 КБ · Просмотры: 21
Последнее редактирование модератором:

_SERG_

Активный участник
Здравствуйте!
Написал мултивалютную и мултитаймфреймную функцию для определения нового бара. Подключил функцию в МТС и МТФ индикаторе для выдачи алерта при сигнале орин раз в течение бара.

bool f_isMTFMULTISY_NewBar0(string f_sy,int f_tf) { int tfIndex=-1; int sy_index=-1; string sym="";//---- switch(f_tf) { case 1 : tfIndex = 0; break; case 5 : tfIndex = 1; break; case 15 : tfIndex = 2; break; case 30 : tfIndex = 3; break; case 60 : tfIndex = 4; break; case 240 : tfIndex = 5; break; case 1440 : tfIndex = 6; break; case 10080: tfIndex = 7; break; default : tfIndex =-1; break; } if(sym=="AUDCAD")sy_index=0; else if(sym =="AUDCHF")sy_index=0; else if(sym =="AUDJPY")sy_index=1; else if(sym =="AUDNZD")sy_index=2; else if(sym =="AUDUSD")sy_index=3; else if(sym =="CADCHF")sy_index=4; else if(sym =="CADJPY")sy_index=5; else if(sym =="CHFJPY")sy_index=6; else if(sym =="EURAUD")sy_index=7; else if(sym =="EURCAD")sy_index=8; else if(sym =="EURCHF")sy_index=9; else if(sym =="EURGBP")sy_index=10; else if(sym =="EURJPY")sy_index=11; else if(sym =="EURNZD")sy_index=12; else if(sym =="EURUSD")sy_index=13; else if(sym =="GBPAUD")sy_index=14; else if(sym =="GBPCAD")sy_index=15; else if(sym =="GBPCHF")sy_index=16; else if(sym =="GBPJPY")sy_index=17; else if(sym =="GBPNZD")sy_index=18; else if(sym =="GBPUSD")sy_index=19; else if(sym =="NZDCAD")sy_index=20; else if(sym =="NZDCHF")sy_index=21; else if(sym =="NZDJPY")sy_index=22; else if(sym =="NZDUSD")sy_index=23; else if(sym =="USDCAD")sy_index=24; else if(sym =="USDCHF")sy_index=25; else if(sym =="USDJPY")sy_index=26; static int LastBar[8][26]= { 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0 }; datetime curbar=iTime(f_sy,f_tf,0); if(LastBar[tfIndex][sy_index]!=curbar) { LastBar[tfIndex][sy_index]=curbar; return (true); } else { return(false); } }
Но алерт работает при каждом новом тике. Не могу найти ошибку, помогите.

Рекомендую воспользоваться отладчиком, чтобы увидеть, как работает то, что написано.
 

Oleg2014

Интересующийся
Доброе время суток. Помогите с проблемой. Когда на рынке есть открытый ордер на бай или сел и есть несколько отложек, я хочу их закрыть, но мне выдает ошибку OrderDelete 4108,когда в рынке только отлодки все работает нормально. Заранее спасибо.
//+------------------------------------------------------------------+
void CloseAll(int type)
{
bool cl=true;
double pBid,pAsk;

for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
pBid=MarketInfo(OrderSymbol(),MODE_BID);
pAsk=MarketInfo(OrderSymbol(),MODE_ASK);
if(type==OP_BUY) cl=OrderClose(OrderTicket(),OrderLots(),fND(pBid),Slip,Blue);
if(type==OP_SELL) cl=OrderClose(OrderTicket(),OrderLots(),fND(pAsk),Slip,Red);
if(type==OP_BUYLIMIT || type==OP_SELLLIMIT) cl=OrderDelete(OrderTicket(),Yellow);
}
}
}
}
//+------------------------------------------------------------------+
 

zQuant

Местный житель
Доброе время суток. Помогите с проблемой. Когда на рынке есть открытый ордер на бай или сел и есть несколько отложек, я хочу их закрыть, но мне выдает ошибку OrderDelete 4108,когда в рынке только отлодки все работает нормально. Заранее спасибо.
//+------------------------------------------------------------------+
void CloseAll(int type)
{
bool cl=true;
double pBid,pAsk;

for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
type = OrderType()l
pBid=MarketInfo(OrderSymbol(),MODE_BID);
pAsk=MarketInfo(OrderSymbol(),MODE_ASK);
if(type==OP_BUY) cl=OrderClose(OrderTicket(),OrderLots(),fND(pBid),Slip,Blue);
if(type==OP_SELL) cl=OrderClose(OrderTicket(),OrderLots(),fND(pAsk),Slip,Red);
if(type==OP_BUYLIMIT || type==OP_SELLLIMIT) cl=OrderDelete(OrderTicket(),Yellow);
}
}
}
}
//+------------------------------------------------------------------+
type = OrderType()l
 

sergeipk3

Интересующийся
Всем привет! Подскажите как написать советник по трем внешним (пользов.) индикаторам! Нашел инфу но там только один индикатор а как все их вместе использовать не понятно. Выдает ошибку что переменные одинаковые.??
 

Oleg2014

Интересующийся
Всем привет! Подскажите как написать советник по трем внешним (пользов.) индикаторам! Нашел инфу но там только один индикатор а как все их вместе использовать не понятно. Выдает ошибку что переменные одинаковые.??
Что за индикаторы, давай гляну.
 

zQuant

Местный житель
Всем привет! Подскажите как написать советник по трем внешним (пользов.) индикаторам! Нашел инфу но там только один индикатор а как все их вместе использовать не понятно. Выдает ошибку что переменные одинаковые.??

Доделывать бота. 3 раза вызывать iCustom - по разу для каждого индикатора. Либо больше, если несколько буферов.
Люди, кто задает такие вопросы - лучше обращаться к специалистам.
 
Верх