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

А пример, будьте добры, если не затруднит. :)
Ну так я дал пример. Единственная поправка это размерность массива не учёл.
Код:
 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;
}/********************************************************************/
А зачем тебе двухмерный массив? Ведь индекс и так присутствует.
 
Ну так я дал пример. Единственная поправка это размерность массива не учёл.

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

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

Не могу пока, понять как это сделать, может кто то знает, как это сделать... поэтому к вам и обращаюсь. В среднем от неё мне нужно от500 до1500 значений. Что делать с вашим примером, даже не представляю.
 
//+-------------------------+ как сделать из такого:
(STORY18((STORY17((STORY16(STORY15(STORY14(STORY13(STORY12(STORY11(STORY10(STORY9(STORY8(STORY7(STORY6(STORY5(STORY4(STORY3(STORY2(STORY1(Bid)
))))))))))))))));
//+-------------------------+ такое:
STORY1(i,Bid);
 
//+-------------------------+ как сделать из такого:
(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]}// перезаполнение в исходный массив(можно и через копирование)
}
 
В общем на объектах сделал.. STORY1(int index, int kod = -1); index - указанный объект в истории, kod - код объекта. Возвращает цену этого объекта или ноль.

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

Не могу пока, понять как это сделать, может кто то знает, как это сделать... поэтому к вам и обращаюсь. В среднем от неё мне нужно от500 до1500 значений. Что делать с вашим примером, даже не представляю.
Каков вопрос, таков и ответ. В твоём вопросе был двухмерный массив, вернись и уточни о чём ты спрашивал.
 
Каков вопрос, таков и ответ. В твоём вопросе был двухмерный массив, вернись и уточни о чём ты спрашивал.
Согласен. Нужно более доходчиво объяснять. Со двора начал...
В общем для такого варианта нужен блок для хранения прошлых значений, а с объектами таким "блоком" выступает сам график.
На этом пока и остановился.
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"

            );
 

Вложения

Такая картинка в общем.
 

Вложения

  • картинка.jpg
    картинка.jpg
    108,7 КБ · Просмотры: 36
Здравствуйте!
Написал мултивалютную и мултитаймфреймную функцию для определения нового бара. Подключил функцию в МТС и МТФ индикаторе для выдачи алерта при сигнале орин раз в течение бара.

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); } }
Но алерт работает при каждом новом тике. Не могу найти ошибку, помогите.
 

Вложения

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

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); } }
Но алерт работает при каждом новом тике. Не могу найти ошибку, помогите.

Рекомендую воспользоваться отладчиком, чтобы увидеть, как работает то, что написано.
 
Доброе время суток. Помогите с проблемой. Когда на рынке есть открытый ордер на бай или сел и есть несколько отложек, я хочу их закрыть, но мне выдает ошибку 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);
}
}
}
}
//+------------------------------------------------------------------+
 
Доброе время суток. Помогите с проблемой. Когда на рынке есть открытый ордер на бай или сел и есть несколько отложек, я хочу их закрыть, но мне выдает ошибку 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
 
Всем привет! Подскажите как написать советник по трем внешним (пользов.) индикаторам! Нашел инфу но там только один индикатор а как все их вместе использовать не понятно. Выдает ошибку что переменные одинаковые.??
 
Всем привет! Подскажите как написать советник по трем внешним (пользов.) индикаторам! Нашел инфу но там только один индикатор а как все их вместе использовать не понятно. Выдает ошибку что переменные одинаковые.??
Что за индикаторы, давай гляну.
 
Всем привет! Подскажите как написать советник по трем внешним (пользов.) индикаторам! Нашел инфу но там только один индикатор а как все их вместе использовать не понятно. Выдает ошибку что переменные одинаковые.??

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

Посмотрели (401) Посмотреть

Отслеживают (499) Посмотреть

Назад
Верх