Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Precisa da ajuda de programadores experientes!
Olá a todos!
Rapazes, precisamos de sua ajuda! Estou escrevendo um Conselheiro Especializado. Eu não sou particularmente bom em programação, então estou pedindo por isso. Estou realizando uma função de verificação para fixar um cadeado nas ordens do mercado. Todas as ordens são escritas em uma matriz bidimensional estruturada. O primeiro índice (célula) da matriz [0] é ordens básicas (de mercado), o segundo índice (célula) [1] é o bloqueio para as ordens básicas. Portanto, a função deve verificar se uma fechadura está definida para uma ordem básica e, se for SIM, não fazemos nada e continuamos a trabalhar. Escrevi a função, mas de alguma forma funciona de novo. Isto é, se, por exemplo, uma ordem de compra de mercado for aberta e o terminal emitir uma mensagem de que não é um tipo de ordem de compra, mas de venda e, portanto, uma fechadura deve ser definida para ela. Mas tudo está funcionando corretamente com as ordens de venda. Eu não consigo entender nada. As ordens são corretamente escritas em arrays. Eu fiz a verificação apropriada e tudo está perfeito. Todos os critérios do mandado são mostrados corretamente na matriz. Por favor, ajude-me a encontrar um erro no código ou de alguma forma modifique minha função. Estou anexando a função.
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); // Передаем нашей функции полученное значение
}
Precisa da ajuda de programadores experientes!
Olá a todos!
Rapazes, precisamos de sua ajuda! Estou escrevendo um Conselheiro Especializado. Eu não sou particularmente bom em programação, então estou pedindo por isso. Estou realizando uma função de verificação para fixar um cadeado nas ordens do mercado. Todas as ordens são escritas em uma matriz bidimensional estruturada. O primeiro índice (célula) da matriz [0] é ordens básicas (de mercado), o segundo índice (célula) [1] é o bloqueio para as ordens básicas. Portanto, a função deve verificar se uma fechadura está definida para uma ordem básica e, se for SIM, não fazemos nada e continuamos a trabalhar. Escrevi a função, mas de alguma forma funciona de novo. Isto é, se, por exemplo, uma ordem de compra de mercado for aberta e o terminal emitir uma mensagem de que não é um tipo de ordem de compra, mas de venda e, portanto, uma fechadura deve ser definida para ela. Mas tudo está funcionando corretamente com as ordens de venda. Eu não consigo entender nada. As ordens são corretamente escritas em arrays. Eu fiz a verificação apropriada e tudo está perfeito. Todos os critérios do mandado são mostrados corretamente na matriz. Por favor, ajude-me a encontrar um erro no código ou de alguma forma modifique minha função. Estou anexando a função.
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); // Передаем нашей функции полученное значение
}
Ou mostrar o registro de sub-vendas.
Ou mostrar o diário de bordo não-rungido.
Eu fiz. Nada mudou. Aqui estão as entradas do log de eventos:
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-ордер. Необходимо его установить!
Veja na função onde VOCÊ preenche oInfoOrderNew[1][n].TypeOrder array
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-ордер. Необходимо его установить!
Obrigado Vladislav Andruschenko por ter participado na busca do problema! Parece que já resolvi isso. Tive que retrabalhar um pouco o código e tudo funcionou de uma só vez.
sem problemas
Acabei de sair para o fim de semana. :-) É bom que esteja classificado.
sem problemas
Acabei de sair para o fim de semana. :-) É bom que esteja classificado.
Surgiu outra pergunta:
Como faço para zerar ou apagar informações em qualquer célula de uma matriz heterogênea estruturada? A questão é que o comentário da ordem mudou e eu preciso apagar esta ordem de uma célula de uma matriz estruturada e definir esta ordem em outra matriz. Tudo está mais ou menos claro com uma matriz regular, mas não tenho certeza de quais operadores ou funções funcionam, ou como processar tudo isso. E como copiar uma matriz estruturada em outra para salvar informações sobre o preenchimento anterior e depois compará-la com a nova? Por favor, informe quem sabe o quê sobre este assunto. Eu ficaria muito grato!
A etiqueta de preço(OBJ_ARROW_LEFT_PRICE) pode ter seu próprio texto em vez do preço, se sim, como?