Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Brauche Hilfe von erfahrenen Programmierern!
Hallo zusammen!
Leute, wir brauchen eure Hilfe! Ich schreibe gerade einen Expert Advisor. Ich bin nicht besonders gut im Programmieren, also bitte ich darum. Ich bin dabei, eine Kontrollfunktion zum Setzen einer Sperre für Marktaufträge zu erstellen. Alle Aufträge werden in ein strukturiertes zweidimensionales Array geschrieben. Der erste Index (Zelle) des Arrays [0] steht für Basisaufträge (Marktaufträge), der zweite Index (Zelle) [1] für Sperren für die Basisaufträge. Die Funktion sollte also prüfen, ob eine Sperre für einen Grundauftrag gesetzt ist, und wenn dies JA ist, tun wir nichts und arbeiten weiter. Ich habe die Funktion geschrieben, aber sie funktioniert irgendwie schief. D.h., wenn z.B. eine Market-Buy-Order eröffnet wird und das Terminal eine Meldung ausgibt, dass es sich nicht um eine BUY-Order, sondern um eine SELL-Order handelt und daher eine Sperre für diese Order gesetzt werden sollte. Bei SELL-Aufträgen funktioniert jedoch alles korrekt. Ich kann nichts verstehen. Die Aufträge werden korrekt in Arrays geschrieben. Ich habe die entsprechende Prüfung durchgeführt und alles ist perfekt. Alle Gewährleistungskriterien werden in der Matrix korrekt angezeigt. Bitte helfen Sie mir, einen Fehler im Code zu finden oder meine Funktion irgendwie zu ändern. Ich hänge die Funktion an.
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); // Передаем нашей функции полученное значение
}
Brauche Hilfe von erfahrenen Programmierern!
Hallo zusammen!
Leute, wir brauchen eure Hilfe! Ich schreibe gerade einen Expert Advisor. Ich bin nicht besonders gut im Programmieren, also bitte ich darum. Ich bin dabei, eine Kontrollfunktion zum Setzen einer Sperre für Marktaufträge zu erstellen. Alle Aufträge werden in ein strukturiertes zweidimensionales Array geschrieben. Der erste Index (Zelle) des Arrays [0] steht für Basisaufträge (Marktaufträge), der zweite Index (Zelle) [1] für Sperren für die Basisaufträge. Die Funktion sollte also prüfen, ob eine Sperre für einen Grundauftrag gesetzt ist, und wenn dies JA ist, tun wir nichts und arbeiten weiter. Ich habe die Funktion geschrieben, aber sie funktioniert irgendwie schief. D.h., wenn z.B. eine Market-Buy-Order eröffnet wird und das Terminal eine Meldung ausgibt, dass es sich nicht um eine BUY-Order, sondern um eine SELL-Order handelt und daher eine Sperre für diese Order gesetzt werden sollte. Bei SELL-Aufträgen funktioniert jedoch alles korrekt. Ich kann nichts verstehen. Die Aufträge werden korrekt in Arrays geschrieben. Ich habe die entsprechende Prüfung durchgeführt und alles ist perfekt. Alle Gewährleistungskriterien werden in der Matrix korrekt angezeigt. Bitte helfen Sie mir, einen Fehler im Code zu finden oder meine Funktion irgendwie zu ändern. Ich hänge die Funktion an.
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); // Передаем нашей функции полученное значение
}
Oder Sie können mir das Protokoll der Zielpreisunterbietung zeigen.
Oder zeigen Sie das ungefesselte Protokoll.
Das habe ich. Es hat sich nichts geändert. Hier ist der Eintrag im Ereignisprotokoll:
2017.01.15 18:23:51.062 2017.01.03 04:15:00 Multi-Trade System ver.1.03 (SergeyOm) GBPUSD,M15: open #1 buy 0.10 GBPUSD at 1.23020 ok
2017.01.15 18:23:51.062 2017.01.03 04:15:00 Multi-Trade System ver.1.03 (SergeyOm) GBPUSD,M15: Функция SendMarketOrder(): Ордер отправлен успешно! Характеристики ордера: Buy#1; Цена открытия: 0.0; Лот: 0.1; Стоплосс: 0.0; Тейкпрофит: 0.0.
2017.01.15 18:23:51.062 2017.01.03 04:15:00 Multi-Trade System ver.1.03 (SergeyOm) GBPUSD,M15: В работе функция ModifyOrder()
2017.01.15 18:23:51.062 2017.01.03 04:15:00 Multi-Trade System ver.1.03 (SergeyOm) GBPUSD,M15: Функция ModifyOrder()
2017.01.15 18:23:51.062 2017.01.03 04:15:00 Multi-Trade System ver.1.03 (SergeyOm) GBPUSD,M15: Функция ModifyOrder(): Торговый поток свободен!
2017.01.15 18:23:51.062 2017.01.03 04:15:00 Multi-Trade System ver.1.03 (SergeyOm) GBPUSD,M15: modify #1 buy 0.10 GBPUSD at 1.23020 sl: 1.18020 tp: 1.23520 ok
2017.01.15 18:23:51.062 2017.01.03 04:15:00 Multi-Trade System ver.1.03 (SergeyOm) GBPUSD,M15: Функция ModifyOrder(): Модификация ордера выполнена успешно!
2017.01.15 18:23:51.062 2017.01.03 04:15:00 Multi-Trade System ver.1.03 (SergeyOm) GBPUSD,M15: В работе функция SetPendingOrder()
2017.01.15 18:23:51.062 2017.01.03 04:15:00 Multi-Trade System ver.1.03 (SergeyOm) GBPUSD,M15: Функция SetPendingOrder(): Выставленная цена SellStop ордера удовлетворяет условиям брокера.
2017.01.15 18:23:51.062 2017.01.03 04:15:00 Multi-Trade System ver.1.03 (SergeyOm) GBPUSD,M15: open #2 sell stop 0.10 GBPUSD at 1.22020 ok
2017.01.15 18:23:51.062 2017.01.03 04:15:00 Multi-Trade System ver.1.03 (SergeyOm) GBPUSD,M15: Функция SetPendingOrder(): Отложенный ордер выставлен c 1-й попытки! Характеристики ордера: SellStop #2; Цена: 1.2202; Лот: 0.1.
2017.01.15 18:23:51.062 2017.01.03 04:15:00 Multi-Trade System ver.1.03 (SergeyOm) GBPUSD,M15: Отложенный SellStop ордер успешно установлен!
2017.01.15 18:23:51.109 2017.01.03 04:30:00 Multi-Trade System ver.1.03 (SergeyOm) GBPUSD,M15: Проверка заполнения массива Lock-ордерами. Ордер Тикет #2; Цена=1.2202; Тип=5; ячейка[0].
2017.01.15 18:23:51.109 2017.01.03 04:30:00 Multi-Trade System ver.1.03 (SergeyOm) GBPUSD,M15: Проверка заполнения массива обычными ордерами. Ордер Тикет #1; Цена=1.2302; Тип=0; ячейка[0].
2017.01.15 18:23:51.109 2017.01.03 04:30:00 Multi-Trade System ver.1.03 (SergeyOm) GBPUSD,M15: Функция OpenOrders(): Общее количество найденных ордеров = 2.
2017.01.15 18:23:51.109 2017.01.03 04:30:00 Multi-Trade System ver.1.03 (SergeyOm) GBPUSD,M15: Функция OpenOrders(): Общее количество рыночных ордеров = 1.
2017.01.15 18:23:51.109 2017.01.03 04:30:00 Multi-Trade System ver.1.03 (SergeyOm) GBPUSD,M15: Функция OpenOrders(): Общее количество Lock-ордеров = 1.
2017.01.15 18:23:51.109 2017.01.03 04:30:00 Multi-Trade System ver.1.03 (SergeyOm) GBPUSD,M15: Функция CheckOrders(): К ордеру Sell #1 не найден Lock-ордер. Необходимо его установить!
Schauen Sie in der Funktion nach, wo SIE das ArrayInfoOrderNew[1][n].TypeOrder füllen
2017.01.15 23:09:48.234 2017.01.03 09:30:00 Multi-Trade System ver.1.03 (SergeyOm) GBPUSD,M15: Проверка заполнения массива обычными ордерами. Ордер Тикет #3; Цена=1.2287; Тип ордера=Sell; ячейка[1].
2017.01.15 23:09:48.234 2017.01.03 09:30:00 Multi-Trade System ver.1.03 (SergeyOm) GBPUSD,M15: Проверка заполнения массива Lock-ордерами. Ордер Тикет #2; Цена=1.2202; Тип ордера=SellStop; ячейка[0].
2017.01.15 23:09:48.234 2017.01.03 09:30:00 Multi-Trade System ver.1.03 (SergeyOm) GBPUSD,M15: Проверка заполнения массива обычными ордерами. Ордер Тикет #1; Цена=1.2302; Тип ордера=Buy; ячейка[0].
2017.01.15 23:09:48.234 2017.01.03 09:30:00 Multi-Trade System ver.1.03 (SergeyOm) GBPUSD,M15: Функция OpenOrders(): Общее количество найденных ордеров = 4.
2017.01.15 23:09:48.234 2017.01.03 09:30:00 Multi-Trade System ver.1.03 (SergeyOm) GBPUSD,M15: Функция OpenOrders(): Общее количество рыночных ордеров = 2.
2017.01.15 23:09:48.234 2017.01.03 09:30:00 Multi-Trade System ver.1.03 (SergeyOm) GBPUSD,M15: Функция OpenOrders(): Общее количество Lock-ордеров = 2.
2017.01.15 23:09:48.234 2017.01.03 09:30:00 Multi-Trade System ver.1.03 (SergeyOm) GBPUSD,M15: Функция CheckOrders(): К ордеру Sell #3 найден Lock-ордер BuyStop #4.
2017.01.15 23:09:48.234 2017.01.03 09:30:00 Multi-Trade System ver.1.03 (SergeyOm) GBPUSD,M15: Функция CheckOrders(): К ордеру Sell #1 не найден Lock-ордер. Необходимо его установить!
Vielen Dank, Vladislav Andruschenko , dass Sie sich an der Suche nach dem Problem beteiligt haben! Ich scheine das Problem gelöst zu haben. Ich musste den Code ein wenig überarbeiten und alles funktionierte auf einmal.
kein Problem
Ich bin nur übers Wochenende ausgefallen. :-) Es ist gut, das zu regeln.
kein Problem
Ich bin nur übers Wochenende ausgefallen. :-) Es ist gut, dass das geklärt ist.
Eine weitere Frage ist aufgetaucht:
Wie kann man Informationen in einer beliebigen Zelle eines strukturierten heterogenen Arrays auf Null setzen oder löschen? Das Problem ist, dass sich der Kommentar des Auftrags geändert hat und ich diesen Auftrag aus einer Zelle eines strukturierten Arrays löschen und diesen Auftrag in einem anderen Array definieren muss. Bei einem normalen Array ist alles mehr oder weniger klar, aber ich bin mir nicht sicher, welche Operatoren oder Funktionen funktionieren oder wie man das alles verarbeiten kann. Und wie kopiere ich ein strukturiertes Array in ein anderes, um Informationen über die vorherige Füllung zu speichern und sie dann mit der neuen zu vergleichen? Bitte beraten Sie, wer was zu diesem Thema weiß. Ich wäre Ihnen sehr dankbar!
Kann das Preisschild(OBJ_ARROW_LEFT_PRICE) anstelle des Preises einen eigenen Text haben, wenn ja, wie?