[AVISO FECHADO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Não posso ir a lugar algum sem você. - página 589
Às vezes os scripts usam #property show_inputs, para exibir um diálogo com parâmetros, como na EA (está lá, é claro), mas é difícil dizer a diferença...
Não resistiu até a manhã. Ficou um pouco melhor, mas não foi possível evitar o florescimento do pedido. Como posso fazer um único pedido na condição exigida? Você mencionou: Não, isso não funcionaria. Somente através da análise do histórico do pedido - como devemos fazer isso ou o que mais é adequado?
como este
int i,orders_total=OrdersTotal();
bool order_on_last_bar=false;
if(orders_total>0) //если есть ордера
{
for(i=orders_total-1;i>=0;i--) //перебираем их все
{
OrderSelect(i,SELECT_BY_POS);
if(iBarShift(OrderOpenTime())==0) //если номер бара, соответствующего сремени открытия, равен 0
order_on_last_bar=true; //фиксируем этот факт
}
}
if(order_on_last_bar==false) // на нулевом баре нет открытых ордеров
{
//делаем то что нам нужно
}
Preenchi todos os valores da função iBarShift (a compilação causou erro antes), int i já foi declarado acima. Tentei remover esta repetição e substituí-la por j por causa da experiência, mas não funcionou - recebi várias ordens de abrir/fechar em algumas barras. Abaixo está o código com as condições de abertura, talvez eu tenha feito alguma bagunça. O que mais podemos fazer?
int j,orders_total=OrdersTotal();
bool order_on_last_bar=false;
if(orders_total>0) //если есть ордера
{
for(j=orders_total-1;j>=0;j--) //перебираем их все
{
OrderSelect(j,SELECT_BY_POS);
if(iBarShift(NULL,0,OrderOpenTime())==0) //если номер бара, соответствующего времени открытия, равен 0
order_on_last_bar=true; //фиксируем этот факт
}
}
if(order_on_last_bar==false) // на нулевом баре нет открытых ордеров
{
while(true) // Цикл закрытия орд.
{
if (Total==0 && Opn_B==true) // Открытых орд. нет +
{ // критерий откр. Buy
RefreshRates(); // Обновление данныхAlert("Попытка открыть Buy. Ожидание ответа..");
Ticket=OrderSend(Symb,OP_BUY,Lts,Ask,2,0,0);//Открытие Buyif (Ticket > 0) // Получилось :)
{
Alert ("Открыт ордер Buy ",Ticket);
return; // Выход из start()
}
if (Fun_Error(GetLastError())==1) // Обработка ошибокcontinue; // Повторная попыткаreturn; // Выход из start()
}
if (Total==0 && Opn_S==true) // Открытых орд. нет +
{ // критерий откр. Sell
RefreshRates(); // Обновление данныхAlert("Попытка открыть Sell. Ожидание ответа..");
Ticket=OrderSend(Symb,OP_SELL,Lts,Bid,2,0,0);//Открытие Selif (Ticket > 0) // Получилось :)
{
Alert ("Открыт ордер Sell ",Ticket);
return; // Выход из start()
}
if (Fun_Error(GetLastError())==1) // Обработка ошибокcontinue; // Повторная попыткаreturn; // Выход из start()
}
break; // Выход из while
}
}
Preenchi todos os valores da função iBarShift (a compilação causou erro antes), int i já foi declarado acima; tentei remover esta repetição e substituí-la por j para uma experiência limpa; não funcionou - consegui abrir/fechar vários pedidos em algumas barras. Abaixo está o código com as condições de abertura, talvez eu tenha feito alguma bagunça. O que mais podemos fazer?
1. O que é a variável Total, onde está seu valor atribuído?
2. seria melhor colocar outro antes do segundo se(Total==0 if(
int start()
{
int
Total, // Количество ордеров в окне
...
// Учёт ордеров
Symb=Symbol(); // Название фин.инстр.
Total=0; // Количество ордеровfor(int i=1; i<=OrdersTotal(); i++) // Цикл перебора ордер
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
{ // Анализ ордеров:if (OrderSymbol()!=Symb)continue; // Не наш фин. инструмif (OrderType()>1) // Попался отложенный
{
Alert("Обнаружен отложенный ордер. Эксперт не работает.");
return; // Выход из start()
}
Total++; // Счётчик рыночн. ордif (Total>1) // Не более одного орд
{
Alert("Несколько рыночных ордеров. Эксперт не работает.");
return; // Выход из start()
}
Ticket=OrderTicket(); // Номер выбранн. орд.
Tip =OrderType(); // Тип выбранного орд.
Price =OrderOpenPrice(); // Цена выбранн. орд.
SL =OrderStopLoss(); // SL выбранного орд.
TP =OrderTakeProfit(); // TP выбранного орд.
Lot =OrderLots(); // Количество лотов
}
}
Os roteiros são indistinguíveis dos EAs...
Às vezes os scripts usam #property show_inputs, para exibir um diálogo com parâmetros, como na EA (está lá, é claro), mas é difícil dizer a diferença...
Você pode sugerir um algoritmo... Precisamos encontrar o tempo de alto e baixo do período de tempo alto no período de tempo baixo.
Você pode sugerir um algoritmo... Você precisa encontrar o tempo do alto e do baixo no tempo do alto no tempo do baixo.
Lembre-se ou use imediatamente i - o índice encontrado.
E o iTime(NULL,TF2,i) será o momento.
Não resistiu até a manhã. Ficou um pouco melhor, mas não foi possível evitar o florescimento do pedido. Como posso fazer um único pedido na condição exigida? Você mencionou: Não, isso não funcionaria. Somente através da análise do histórico do pedido - como devemos fazer isso ou o que mais é adequado?
como este
Já fiz esta pergunta antes, mas agora preciso dela novamente, para calcular o volume máximo para abrir uma posição. Escrevo desta forma:
Mas Max_lots é sempre igual a zero... Não sei, pode ser que alguém conheça uma construção mais competente de cálculo de tal coisa?
como este
Preenchi todos os valores da função iBarShift (a compilação causou erro antes), int i já foi declarado acima. Tentei remover esta repetição e substituí-la por j por causa da experiência, mas não funcionou - recebi várias ordens de abrir/fechar em algumas barras. Abaixo está o código com as condições de abertura, talvez eu tenha feito alguma bagunça. O que mais podemos fazer?
Preenchi todos os valores da função iBarShift (a compilação causou erro antes), int i já foi declarado acima; tentei remover esta repetição e substituí-la por j para uma experiência limpa; não funcionou - consegui abrir/fechar vários pedidos em algumas barras. Abaixo está o código com as condições de abertura, talvez eu tenha feito alguma bagunça. O que mais podemos fazer?
1. O que é a variável Total, onde está seu valor atribuído?
2. seria melhor colocar outro antes do segundo se(Total==0 if(
1. O que é a variável Total e onde está seu valor atribuído?
Isto é baseado no exemplo do artigo Simple Expert: https://book.mql4.com/ru/samples/expert
alsu:
2. antes do segundo if(Total==0 é melhor colocar outro if(.
Não ajudou. alsu, desculpe a intromissão, mas eu realmente quero descobrir (acabar com isso).
nada de mais.
tentar cometer /* */ código de EA simples, e substituir Total por order_total - uma variável que nós mesmos declaramos.