Подскажите добрые люди Как программно отключить использование прокси в mt4?
Серж, привет! С прошедшими! И всех с прошедшими!))Это типа тонкий намёк всем, вместо тебя хэлп по терминалу почитать?
ребят - подскажите пожалуйста, знакомый помогает - но он не профессиональный программист.Задача такая - есть график например м15 - на нём рисуются индикатором ломаные линии.Как можно определить касание (либо там по условиям закрытие за ней,либо закрытие всей свечи) но свечи старшего ТФ например Н1 или Н4.Т.е. для горизонтальной линии он понимает как , а вот как прописать пробитие наклонной линии ? Что-то не разобрался как изображение вставить-вернее вставляю-но на предварительном просмотре не отображается тогда скрин.
вопрос цену какого момента брать
Начала периода, середины или конца.
Если ТФ для пересечений Н4, а график чарта М15 я могу для сравнения (поиска пересечений) извлечь 16 разных цен.
А мне нужно одну.
это вот програмист спрашивает, а я не знаю как сказать, мне то нужно увидеть момент пересечения-а он же не обязательно будет в начале периода, середине или конце ? Т.е. он говорит какую из трёх точек выбрать - а мне нужно касание или пересечение в любой точке ?
//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
bool CheckOrders() // Есть массив с базовыми ордерами, открытыми по рынку InfoOrderNew[0][200]
{ // Есть массив с лок ордерами, выставленными к базовым InfoOrderNew[1][200]
int TypeOrder;
string Type = "",
OrderComm = "";
bool OpenLockOrder = false; // Флаг на установку лок ордера
for(int i=OrdersTotal()-1;i>=0;i--) // Выполняем перебор по рыночн. и отлож. ордерам
{
if((OrderSelect(i,SELECT_BY_POS) == true) // Если есть следующ.
&& (OrderSymbol() == Symbol())) // .. и наша вал.пара
{
OrderComm = OrderComment(); // Выбираем соответствующий комментарий ордера
TypeOrder = OrderType(); // Выбираем соответствующий тип ордера
for(int n=0; n<=199; n++) // Выполняем прогон по массиву ордеров
{
if(StringFind(OrderComm,"BaseIndex #"+IntegerToString(n)+"_",0)>=0) // Ищем базовый ордер с индексом в комментарии, соответствующем номеру ячейки в массиве ордеров
{
if((TypeOrder == InfoOrderNew[0][n].TypeOrder) == OP_BUY) // Если находим и наш ордер в массиве является BUY
{
if(InfoOrderNew[1][n].TypeOrder == 1 || InfoOrderNew[1][n].TypeOrder == 5) // Проверяем, выставлен ли к нему лок ордер (SELL или SELLSTOP) в массиве лок ордеров
{
if(InfoOrderNew[1][n].TypeOrder == 1) Type = "Sell";
if(InfoOrderNew[1][n].TypeOrder == 5) Type = "SellStop";
if(Debug) Print("Функция CheckOrders(): К ордеру Buy #",InfoOrderNew[0][n].TicketOrder," найден Lock-ордер ",Type," #",InfoOrderNew[1][n].TicketOrder,".");
break; // Если лок выставлен, то выходим из функции
}
else // Если нет, то
{
if(Debug) Print("Функция CheckOrders(): К ордеру Buy #",InfoOrderNew[0][n].TicketOrder," не найден Lock-ордер. Необходимо его установить!");
OpenLockOrder = true; // Даем сигнал на установку лока
}
}
if((TypeOrder == InfoOrderNew[0][n].TypeOrder) == OP_SELL) // Если наш ордер в массиве является SELL
{
if(InfoOrderNew[1][n].TypeOrder == 0 || InfoOrderNew[1][n].TypeOrder == 4) // Проверяем, выставлен ли к нему лок ордер (BUY или BUYSTOP) в массиве лок ордеров
{
if(InfoOrderNew[1][n].TypeOrder == 0) Type = "Buy";
if(InfoOrderNew[1][n].TypeOrder == 4) Type = "BuyStop";
if(Debug) Print("Функция CheckOrders(): К ордеру Sell #",InfoOrderNew[0][n].TicketOrder," найден Lock-ордер ",Type," #",InfoOrderNew[1][n].TicketOrder,".");
break; // Если лок выставлен, то выходим из функции
}
else // Если нет, то
{
if(Debug) Print("Функция CheckOrders(): К ордеру Sell #",InfoOrderNew[0][n].TicketOrder," не найден Lock-ордер. Необходимо его установить!");
OpenLockOrder = true; // Даем сигнал на установку лока
}
}
}
}
}
}
return(OpenLockOrder); // Передаем нашей функции полученное значение
}
Привет всем!
Ребят, нужна ваша помощь! Пишу себе одного советника. В программировании не особо силен, поэтому и обращаюсь. В общем, делаю проверочную функцию на установку лока к рыночным ордерам. Все ордера заносятся в структурный двумерный массив. Первый индекс (ячейка) массива [0] - это базовые(рыночные) ордера, второй индекс(ячейка) [1] - это локи к базовым ордерам. Так вот, функция должна выполнять проверку, установлен ли лок к базовому ордеру и, если - ДА, то мы ничего не делаем и работаем дальше, а если -НЕТ, то даем сигнал на установку соответствующего лока. Функцию я написал, но она работает как-то криво. Т.е., например, открывается рыночный ордер Buy, терминал выдает, что это тип ордера не BUY, а SELL и поэтому к нему надо выставить лок. А с SELL ордерами все работает правильно. Я ничего не могу понять. Ордера правильно записываются в массивы. Делал соответствующую проверку - все идеально. Все критерии ордера в массиве отражаются верно. Помогите найти ошибку в коде или как-то переделать мою функцию. Функцию прилагаю.
При беглом взгляде на код - вроде все нормально...
НО, при более пристальном - непонятно... например, после нахождения ордера, у которого уже есть лок(типа ничего не надо делать), у тебя стоит оператор "брейк" , а это = прервать цикл перебора и перейти к следующему оператору. А что делать с остальными оставшимися ордерами , а если там остались незалоченные ордера, а ты уже прервал цикл?
И еще... - твоя функция возвращает только "тру-фальш", не говоря с каким ордером нужно работать, возможно так и надо(я не знаю, не вижу весь код) , но смысл тогда в функции, только информативный?
Break я уже потом поставил, думал, что поможет. Оказывается, что он есть, что его нет - это никак не влияет на ошибку. Про то, что данная ф-ция не говорит о конкретном ордере - это я тоже понимаю. Концовка еще не доделана. Дополнительные "навороты" уже поставлю потом, когда устраню ошибку. Меня интересует, как ордер Buy из ячейки массива заходит в функцию, где идет перебор по Sell ордерам?! Что тут не так?
Тогда мое предложение - меняй брейк на континуе и заремируй весь кусок про селл ордера, пока забудь о них, работай только с баями, каждое действие обложи принтами...
И смотри что и когда выдает в принты, ставь рыночные ордера без лока - смотри что пишет, потом их залокируй и смотри что пишет...
В общем ищи, иначе никак ...
Я бы не так писал, но у каждого свой путь, стиль...
Почти всё то же самое, присвой ячейке новое значениеЕще возник такой вопрос:
Как обнулять или удалять информацию в какой-либо из ячеек структурного неоднородного массива? Дело в том, что у меня изменился комментарий к ордеру и мне надо этот ордер удалить из ячейки структурного массива и определить этот ордер в другой массив. С обычным массивом все более менее понятно, а вот со структурными, я не знаю, какие операторы или функции работают или как это все надо оформлять? И как копировать один структурный массив в другой, чтобы сохранить информацию о предыдущем заполнении и потом ее сравнивать с новым заполнением? Подскажите, кто что знает по этому поводу. Буду очень благодарен!
Если в торговом терминале МТ4 отсутствуют сделки с магиком №33 то...
int orders=0;
int Magic=33;
//Счётчик ордеров с маджиком
int total=OrdersTotal();
for(int i=total-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderMagicNumber()==Magic)orders++;
}
//Если ордеров не найдено
if(orders==0)
{
}
Вполне возможно обмениваться данными между терминалами через файл в общей папке, для этого она и существует.Можно ли создать советник, который бы открывал сделки по сигналам приходящим из вне. Например с мобильного телефона, емейла, Telegram и т.д.? Нужно чтобы сделки открывались по сигналам с другого метатрейдера, но при этом чтобы в самом "сигнальном" метатрейдере никаких сделок не открывалось.