Благодарю хоть глаза немного раскрылись я записал код так
#property copyright""#property link""#property version"1.00"#property strictinputdouble Lots=0.1;
inputint SL=100;
inputint TP=100;
inputint Magic=2345;
inputint Period_MA_1=1;
inputint Period_MA_2=6;
inputbool buy = true; //флаг разрешающий/запрещающий покупки inputbool sell = true; // здесь было false не знаю насколько это важно ошибок нет inputint orders = 3;
intOnInit()
{
return(INIT_SUCCEEDED);
}
voidOnTick()
{
int i=0;
int ticket=0;
double MA_1;
MA_1=iMA(_Symbol,0,1,0,1,0,0);
double MA_2;
MA_2=iMA(_Symbol,0,6,0,1,0,0);
if(buy)
{
while(i<orders)
{
RefreshRates(); эта функция не имеет особого значения
if(MA_1 > MA_2)
ticket=OrderSend(_Symbol,OP_BUY,Lots,Ask,0,0,0,"",Magic,0,clrGreen);
if(ticket!=-1)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
{
ticket=OrderModify(ticket,OrderOpenPrice(),Ask-SL*Point,Bid+TP*Point,0,clrGreen);
}
}
i++;
}
}
i=0;
if(sell)
{
while(i<orders)
{
RefreshRates();
if(MA_1 < MA_2)
ticket=OrderSend(_Symbol,OP_SELL,Lots,Bid,0,0,0,"",Magic,0,clrRed);
if(ticket!=-1)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
{
ticket=OrderModify(ticket,OrderOpenPrice(),Bid+SL*Point,Ask-TP*Point,0,clrRed);
}
}
i++;
}
}
}voidOnDeinit(constint reason)
{
}
Но есть ещё такой косяк мне нужно чтобы открытие сделок происходило при единоразовом выполнении условия а оно открывает серию сделок постоянно пока MA_1 > MA_2 на каждом тике т. е. получается бесконечный цикл открытия сделок т. к. MA_1 может находится долгое время над MA_2 или наоборот. Если к примеру робот открыл сделки по выполнению условия то больше он не открывает пока они не будут закрыты. Даже не представляю как будет выглядеть эта запись.
Благодарю хоть глаза немного раскрылись я записал код так
Но есть ещё такой косяк мне нужно чтобы открытие сделок происходило при единоразовом выполнении условия а оно открывает серию сделок постоянно пока MA_1 > MA_2 на каждом тике т. е. получается бесконечный цикл открытия сделок т. к. MA_1 может находится долгое время над MA_2 или наоборот. Если к примеру робот открыл сделки по выполнению условия то больше он не открывает пока они не будут закрыты. Даже не представляю как будет выглядеть эта запись.
Ставьте счетчик в код, Если счетчик ==0 то ничего не делать, если условие выполняется то счетчик равен количеству ордеров и уменьшайте его на 1 каждый раз при открытии ордеров.
а как это записать на алгоритмическом уровне как это выглядит. Как привязать условие к счётчику я понимаю что всё вроде просто если условие выполняется то то-то то-то нужно присвоить переменную которая будет связана с условием пример
int i=0; не несёт никакой смысловой нагрузки далее идёт запись,
while(i<orders) здесь переменная i приобретает смысловую нагрузку у нас есть формулировка я так понял здесь в посте ранее мне разъяснили значение
кода который я нашёл от туда я и взял такие мысли и этот код позволяет открывать 3 сделки сразу.
if(ticket!=-1) вы писали про уменьшение
i++ здесь происходит подсчёт циклов действий
i=0; обнуляется всё и начинается с начала
А теперь что-то подобное нужно прописать с условием но я не понимаю как
Далее но мне нужно открывать 3 ордера сразу код представлен выше, теперь открывается 3 сделки но проблема с бесконечным открытием ордеров остаётся не решённой.
Я взял код из МА из МТ4 и смешал со своим
#property copyright"2005-2014, MetaQuotes Software Corp."#property link"http://www.mql4.com"#property description"Moving Average sample expert advisor"#define MAGICMA 20131111inputdouble Lots=0.1;
inputint Period_MA_1=1;
inputint Period_MA_2=6;
inputint orders=3;
inputint SL=100;
inputint TP=100;
int CalculateCurrentOrders(string symbol) это пользовательская функция которая учитывает сделки
{
int buys=0,sells=0; здесь указаны эти сделки их формат(я пробовал тройки вместо 0ей но не работает)
for(int i=0;i<orders;i++) оператор который позволяет писать 3 выражения я вписал сюда i<orders чтобы значение было 3
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; здесь мы выбираем ордер для работы с ним для чего не понятно
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA) здесь выбирается инструмент и есть возвращаемо значение магический номер для чего не понятно
{
if(OrderType()==OP_BUY) buys++; возвращает тип операции тоже не понятно для чего указано что это будут int buys=0,sells=0;
if(OrderType()==OP_SELL) sells++;
}
}
//--- return orders volumeif(buys>0) return(buys); здесь ордера меняются открываются в обратную сторону или что
elsereturn(-sells); если использовать стандартный код то ордера не меняются
}
void CheckForOpen() пользоват. функция в которой описаны условия открытия сделок
{
double MA_1; это моё
MA_1=iMA(_Symbol,0,1,0,1,0,0);
double MA_2;
MA_2=iMA(_Symbol,0,6,0,1,0,0);
int ticket=0;
//--- go trading only for first tiks of new barif(Volume[0]>1) return; с этой записью открывается 6 ордеров если использовать код из поста ранее
//--- get Moving Average //--- sell conditionsif(MA_1<MA_2) это моё
{
RefreshRates(); если эту функцию удалить ошибок нет зачем она, осбого значения не придаёт масло масленное
ticket=OrderSend(_Symbol,OP_BUY,Lots,Ask,0,0,0,"",MAGICMA,0,clrGreen); это моё
if(ticket!=-1)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
{
ticket=OrderModify(ticket,OrderOpenPrice(),Ask-SL*Point,Bid+TP*Point,0,clrGreen); я удалил блок LotsOptimized и записал свои строки
}
}
return;
}
//--- buy conditionsif(MA_1>MA_2)
{
RefreshRates();
ticket=OrderSend(_Symbol,OP_SELL,Lots,Bid,0,0,0,"",MAGICMA,0,clrRed);
if(ticket!=-1)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
{
ticket=OrderModify(ticket,OrderOpenPrice(),Bid+SL*Point,Ask-TP*Point,0,clrRed);
}
}
return;
}
}
voidOnTick()
{
//--- check for history and tradingif(Bars<100 || IsTradeAllowed()==false) этот блок мне тоже не понятен
return;
//--- calculate open orders by current symbolif(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
}
В этом случае 3 сделки он не открывает тут есть не нужные условия которые мне не понятны в общем как-то так.
а как это записать на алгоритмическом уровне как это выглядит. Как привязать условие к счётчику я понимаю что всё вроде просто если условие выполняется то то-то то-то нужно присвоить переменную которая будет связана с условием пример
А теперь что-то подобное нужно прописать с условием но я не понимаю как
вот моя первая запись здесь тоже такая проблема
Далее но мне нужно открывать 3 ордера сразу код представлен выше, теперь открывается 3 сделки но проблема с бесконечным открытием ордеров остаётся не решённой.
Я взял код из МА из МТ4 и смешал со своим
В этом случае 3 сделки он не открывает тут есть не нужные условия которые мне не понятны в общем как-то так.
Я могу ошибаться, но думаю что вам просто нужно до конца разобраться в синтаксисе. Пройдите до конца учебник по mql4. Уверен, после этого большинство вопросов у вас отпадут.
а как это записать на алгоритмическом уровне как это выглядит. Как привязать условие к счётчику я понимаю что всё вроде просто если условие выполняется то то-то то-то нужно присвоить переменную которая будет связана с условием пример
А теперь что-то подобное нужно прописать с условием но я не понимаю как
вот моя первая запись здесь тоже такая проблема
Далее но мне нужно открывать 3 ордера сразу код представлен выше, теперь открывается 3 сделки но проблема с бесконечным открытием ордеров остаётся не решённой.
Я взял код из МА из МТ4 и смешал со своим
В этом случае 3 сделки он не открывает тут есть не нужные условия которые мне не понятны в общем как-то так.
Покажите на графике, где вы хотите открываться. То есть, заскриньте график и отметьте на нем пару примеров, где на нем ваш эксперт должен входить.
Я могу ошибаться, но думаю что вам просто нужно до конца разобраться в синтаксисе. Пройдите до конца учебник по mql4. Уверен, после этого большинство вопросов у вас отпадут.
Я читал учебник и документацию 2 раза разве что выучить наизусть.
Вот пример. Открывает 3 ордера после каждого пересечения MA.
Я нашёл этот код в учебнике https://book.mql4.com/ru/samples/expert хотел бы спросить почему не работает это не первый случай когда автор разработчик не может даже рабочий пример предоставить чтобы можно было научиться работать с кодом.
Я нашёл этот код в учебнике https://book.mql4.com/ru/samples/expert хотел бы спросить почему не работает это не первый случай когда автор разработчик не может даже рабочий пример предоставить чтобы можно было научиться работать с кодом.
Как вы думаете? Что это могло бы значить?
В случае, если туго с английским, можно попробовать сделать так:
Примеры в учебнике все работают. Вообще учебник замечательный.
В случае, если туго с английским, можно попробовать сделать так:
Примеры в учебнике все работают. Вообще учебник замечательный.
Материал подан исчерпывающе многие начинающие столкнулись с проблемой что сами ни чего не смогли, а в особенности очень исчерпывающе объясняется код что означает написанное понять вообще невозможно. Так сделать как вы показали я смог но мне по коду понятно я могу его понять на 70% что-то просто догадываюсь но не могу составить алгоритм сам не получается. Переводить там ничего не надо есть очень краткое исчерпывающее описание. Я вставляю это дело в компилятор выдаёт ошибку
мало того что я и так не могу понять разобраться так ещё и код битый. Как исправить этот косяк с какой-то определённой переменной. А вы говорите примеры работают и сами же вставили эту ошибку.
Благодарю хоть глаза немного раскрылись я записал код так
Но есть ещё такой косяк мне нужно чтобы открытие сделок происходило при единоразовом выполнении условия а оно открывает серию сделок постоянно пока MA_1 > MA_2 на каждом тике т. е. получается бесконечный цикл открытия сделок т. к. MA_1 может находится долгое время над MA_2 или наоборот. Если к примеру робот открыл сделки по выполнению условия то больше он не открывает пока они не будут закрыты. Даже не представляю как будет выглядеть эта запись.
Благодарю хоть глаза немного раскрылись я записал код так
Но есть ещё такой косяк мне нужно чтобы открытие сделок происходило при единоразовом выполнении условия а оно открывает серию сделок постоянно пока MA_1 > MA_2 на каждом тике т. е. получается бесконечный цикл открытия сделок т. к. MA_1 может находится долгое время над MA_2 или наоборот. Если к примеру робот открыл сделки по выполнению условия то больше он не открывает пока они не будут закрыты. Даже не представляю как будет выглядеть эта запись.
Ставьте счетчик в код, Если счетчик ==0 то ничего не делать, если условие выполняется то счетчик равен количеству ордеров и уменьшайте его на 1 каждый раз при открытии ордеров.
а как это записать на алгоритмическом уровне как это выглядит. Как привязать условие к счётчику я понимаю что всё вроде просто если условие выполняется то то-то то-то нужно присвоить переменную которая будет связана с условием пример
while(i<orders) здесь переменная i приобретает смысловую нагрузку у нас есть формулировка я так понял здесь в посте ранее мне разъяснили значение кода который я нашёл от туда я и взял такие мысли и этот код позволяет открывать 3 сделки сразу.i=0; обнуляется всё и начинается с началаА теперь что-то подобное нужно прописать с условием но я не понимаю как
вот моя первая запись здесь тоже такая проблема
Далее но мне нужно открывать 3 ордера сразу код представлен выше, теперь открывается 3 сделки но проблема с бесконечным открытием ордеров остаётся не решённой.
Я взял код из МА из МТ4 и смешал со своим
В этом случае 3 сделки он не открывает тут есть не нужные условия которые мне не понятны в общем как-то так.
а как это записать на алгоритмическом уровне как это выглядит. Как привязать условие к счётчику я понимаю что всё вроде просто если условие выполняется то то-то то-то нужно присвоить переменную которая будет связана с условием пример
А теперь что-то подобное нужно прописать с условием но я не понимаю как
вот моя первая запись здесь тоже такая проблема
Далее но мне нужно открывать 3 ордера сразу код представлен выше, теперь открывается 3 сделки но проблема с бесконечным открытием ордеров остаётся не решённой.
Я взял код из МА из МТ4 и смешал со своим
В этом случае 3 сделки он не открывает тут есть не нужные условия которые мне не понятны в общем как-то так.
Я могу ошибаться, но думаю что вам просто нужно до конца разобраться в синтаксисе. Пройдите до конца учебник по mql4. Уверен, после этого большинство вопросов у вас отпадут.
а как это записать на алгоритмическом уровне как это выглядит. Как привязать условие к счётчику я понимаю что всё вроде просто если условие выполняется то то-то то-то нужно присвоить переменную которая будет связана с условием пример
А теперь что-то подобное нужно прописать с условием но я не понимаю как
вот моя первая запись здесь тоже такая проблема
Далее но мне нужно открывать 3 ордера сразу код представлен выше, теперь открывается 3 сделки но проблема с бесконечным открытием ордеров остаётся не решённой.
Я взял код из МА из МТ4 и смешал со своим
В этом случае 3 сделки он не открывает тут есть не нужные условия которые мне не понятны в общем как-то так.
Покажите на графике, где вы хотите открываться. То есть, заскриньте график и отметьте на нем пару примеров, где на нем ваш эксперт должен входить.
Я могу ошибаться, но думаю что вам просто нужно до конца разобраться в синтаксисе. Пройдите до конца учебник по mql4. Уверен, после этого большинство вопросов у вас отпадут.
Я читал учебник и документацию 2 раза разве что выучить наизусть.
Я читал учебник и документацию 2 раза разве что выучить наизусть.
Вот пример. Открывает 3 ордера после каждого пересечения MA.
Вот пример. Открывает 3 ордера после каждого пересечения MA.
Я нашёл этот код в учебнике https://book.mql4.com/ru/samples/expert хотел бы спросить почему не работает это не первый случай когда автор разработчик не может даже рабочий пример предоставить чтобы можно было научиться работать с кодом.
Я нашёл этот код в учебнике https://book.mql4.com/ru/samples/expert хотел бы спросить почему не работает это не первый случай когда автор разработчик не может даже рабочий пример предоставить чтобы можно было научиться работать с кодом.
Как вы думаете? Что это могло бы значить?
В случае, если туго с английским, можно попробовать сделать так:
Примеры в учебнике все работают. Вообще учебник замечательный.
Как вы думаете? Что это могло бы значить?
В случае, если туго с английским, можно попробовать сделать так:
Примеры в учебнике все работают. Вообще учебник замечательный.
Материал подан исчерпывающе многие начинающие столкнулись с проблемой что сами ни чего не смогли, а в особенности очень исчерпывающе объясняется код что означает написанное понять вообще невозможно. Так сделать как вы показали я смог но мне по коду понятно я могу его понять на 70% что-то просто догадываюсь но не могу составить алгоритм сам не получается. Переводить там ничего не надо есть очень краткое исчерпывающее описание. Я вставляю это дело в компилятор выдаёт ошибку
мало того что я и так не могу понять разобраться так ещё и код битый. Как исправить этот косяк с какой-то определённой переменной. А вы говорите примеры работают и сами же вставили эту ошибку.