[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 665
Lamento que seja tão feio - tive que escrevê-lo de memória, pois o código não funcionou e eu o apaguei. Mas você, como profissional, deve ser compreensível (espero).
Você me lisonjeia :)) Sou um principiante, como você...
extremumprice.mq4
// Предназначен для использования в качестве примера в учебнике MQL4.//--------------------------------------------------------------------externint Quant_Bars =30; // Количество баровbool OpnBuy =false,
OpnSell =false;
//--------------------------------------------------------------------int start() // Спец. функция start
{
int i; // Номер бара double Minimum=Bid, // Минимальная цена
Maximum=Bid; // Максимальная ценаfor(i=0;i<=Quant_Bars-1;i++) // От нуля (!) до..
{ // ..Quant_Bars-1 (!)if (Low[i]< Minimum) // Если < известного
Minimum=Low[i]; // то оно и будет минif (High[i]> Maximum) // Если > известного
Maximum=High[i]; // то оно и будет макс
}
//--------------------------------------------------------------------if (iOpen(NULL,0,1)>Maximum)
{
OpnBuy =true:
OpnSell=false;
}
if (iOpen(NULL,0,1)<Minimum)
{
OpnSell=true;
OpnBuy =false:
}
//-------------------------------------------------------------------// А тут код открытия позиций. if (OpnBuy) {открываем Бай};// if (OpnSell) {открываем Селл};// Но обязательно нужно сделать проверку на существование уже открытой позиции,// иначе они будут открываться на каждом тике пока присутствует сигнал...return; // Выход из start()
}
//--------------------------------------------------------------------
É mais ou menos assim. Não o verificou, apenas o escreveu no local.
1. Defina a ordem pendente com um número mágico, digamos 101, e zere a bandeira para converter a ordem em uma posição, digamos ConvOrd=false;
2. verificar se a posição com a 101 mágica apareceu; em caso afirmativo, colocar a bandeira de conversão ConvOrd=true;
3. verificar se ConvOrd==verdadeiro, verificamos se a posição com o número mágico 101 existe - e se está faltando significa que já está fechado.
{deselecione ConvOrd=falso; defina um novo pendente;}.
Acho que podemos passar sem bandeiras...
Entendo a lógica, mas não sei como implementá-la em código. Eu tentei muitas variantes, mas não obtive nenhum resultado. Eu acho que sou um boneco. É por isso que eu escrevi aqui. Na p.663 eu lhe mostrei meu código. Se você estiver interessado, por favor, me diga como melhorá-lo ou pelo menos me diga como melhorá-lo. Obrigado.
artmedia70, Roger obrigado por sua ajuda. Acho que descobri, de fato o preço na barra 0 não pode ser inferior ou superior ao mínimo e máximo, não pensei nisso e acrescentei Ask como um valor de variável Min, agora parece funcionar. artmedia70, em comparação comigo, a maioria são profissionais))))) Mais uma vez, obrigado.
dimon74: Entendo a lógica, mas não sei como implementá-la em código. Eu tentei muitas variantes, mas não obtive nenhum resultado. Eu acho que sou um boneco. É por isso que eu escrevi aqui. Na p.663 eu lhe mostrei meu código. Se você estiver interessado, por favor, me diga como melhorá-lo ou pelo menos me diga como melhorá-lo. Obrigado.
Tente uma maneira mais simples, quando fizer um pedido SellStop, lembre-se do valor do TakeProfit e se o Bid cair abaixo desse preço, coloque-o na Buy.
Tente uma maneira mais simples, quando você fizer um pedido SellStop, lembre-se do valor TakeProfit e se o Bid cair abaixo deste preço, coloque-o na Buy.
Obrigado pela dica! Já tentei esta variante, mas não é adequada para minha estratégia.
Não entendo porque há duas posições de fechamento ao mesmo tempo. A lógica é a seguinte:
Quando o patrimônio atinge uma certa porcentagem do lucro anterior, fechamos todas as posições. Isto funciona corretamente... A seguir...
Se o patrimônio cair uma certa porcentagem de seu valor anterior, procure a posição com maior perda, identifique quem é... Comprar ou Vender...
e abrir uma posição de travamento na direção oposta com lote duplo. Depois olhamos para seu lucro total (da posição de perda e travamento) e assim que ele se torna maior,
Digamos 10 pips, feche-os...
Logicamente, a equidade deve ser verificada no próximo tick e, se tudo estiver bem, continuamos trabalhando... Se tudo estiver bem novamente, teremos de procurar o próximo otário.
Mas, por alguma razão, abre duas posições de fechamento ao mesmo tempo. e Comprar e Vender, e se o lote foi 0,1, então o primeiro travamento abre o dobro do lote = 0,2,
e a segunda dobra-o novamente e abre com 0,4 lote ... Respectivamente, que diabos está ali, se estão lutando uns com os outros por um lugar sob o Sol ... :(
Estou anexando o código, talvez alguém possa me cutucar com seu... dedo.
//----------------- Закрытие позиций если эквити выросло на N процентов ---------------------------if (Equ_NEW>=Equ_OLD+EquPerc) // Новое эквити больше старого на процент прибыли..
{
// ClosePosBySizeLossInCurrency(NULL, -1, -1, 0); // Закрытие всех убыточных позиций
ClosePosFirstProfit(NULL, -1, -1); // Закрываем все позиции, сначала прибыльные
DeleteOrders(NULL, -1, -1); // Удаляем ордера
Equ_NEW=AccountEquity(); // Запоминаем новое значение эквити
Equ_OLD=Equ_NEW; // и вписываем его в "старое"
CountClsEQU++; // Увеличиваем счётчик кол-ва закрытий для ф-ции вывода информации
LockBuy51 =true; // Разрешаем открытие локирующих
LockSell51=true; // позиций Buy и Sell
OpnBuy51 =true; // и вообще разрешаем открываться
OpnSell51 =true; // в любую сторону...
}
//------------- Включение вывода убыточных позиций в ноль, если эквити упало на N процентов -----------------------if (Equ_NEW<=Equ_OLD-EquPerc/2) // Новое эквити меньше старого на столько-то процентов...
{
Trade=false; // Запрещаем торговлю//-------------- Закрытие двух позиций, если ранее был установлен лок на убыточную ------------- if (OrderSelect(TicketLoss, SELECT_BY_POS, MODE_TRADES)) // Выбираем убыточную позицию (если её тикет
{ // ранее был сохранён в TicketLoss)double prloss=OrderProfit()+OrderSwap(); // Размер профита убыточной позицииint typeloss =OrderType(); // Тип убыточной позицииint mnloss =OrderMagicNumber(); // Magic убыточной позиции
}
if (OrderSelect(TicketLock, SELECT_BY_POS, MODE_TRADES)) // Выбираем локирующую позицию (если её тикет
{ // ранее был сохранён в TicketLock)double prlock=OrderProfit()+OrderSwap(); // Размер профита локирующей позицииint typelock =OrderType(); // Тип локирующей позиции
}
if (prloss+prlock>=10*Point) // Если их суммарный профит больше 10 пунктов
{
ClosePositions(NULL, typelock, 5100); // Закрываем локирующую позицию
ClosePositions(NULL, typeloss, mnloss); // Закрываем убыточную позицию
}
//--------------- Поиск убыточной позиции и установка локирующей ------------------------- double Loss=0; // Последнее значение убыткаint i, k=OrdersTotal(), OrdTicket=-1;
for (i=k-1; i>=0; i--) { // Цикл по всем ордерам терминалаif (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if ((OrderProfit()+OrderSwap()<0)) { // Если профит позиции меньше 0if (Loss>OrderProfit()+OrderSwap()) { // Если последнее значение убытка больше убытка позиции
Loss=OrderProfit()+OrderSwap(); // Значит тут убыток больше, запоминаем как последнее
OrdTicket=i; // Запоминаем номер убыточной позиции
}
}
}
}
if (OrdTicket>=0) {
if (OrderSelect(OrdTicket, SELECT_BY_POS, MODE_TRADES)) { // Выбираем позицию по тикету
TicketLoss=OrdTicket; // Запоминаем как тикет убыточной позыif (OrderType()==OP_BUY) // Если её тип Бай
{
Magic=5100; // Задаём магик...
New_Comm="Sell_M5_Стратегия_1_Локирующая позиция"; // Задаём комментарий для позиции
Lots_New=NormalizeLot(OrderLots()*2, False, NULL); // Увеличим лот в два разаif (!ExistPositions(NULL, OP_SELL, 5100, 0)){ // Если нет локирующего Sell
OpenPosition(NULL,OP_SELL,Lots_New,0,pb-tp*100*po,Magic,New_Comm);} // Открываем локирующий...if (ExistPositions(NULL, OP_SELL, 5100, 0)) // Проверяем, заодно и выбираем её
{TicketLock=OrderTicket();} // Сохраняем тикет локирующего Sell
}
if (OrderType()==OP_SELL)
{
Magic=5100; // Задаём магик...
New_Comm="Buy_M5_Стратегия_1_Локирующая позиция"; // Задаём комментарий для позиции
Lots_New=NormalizeLot(OrderLots()*2, False, NULL); // Увеличим лот в два разаif (!ExistPositions(NULL, OP_BUY, 5100, 0)){ // Если нет локирующего Buy
OpenPosition(NULL,OP_BUY,Lots_New,0,pa+tp*100*po,Magic,New_Comm);} // Открываем локирующий...if (ExistPositions(NULL, OP_BUY, 5100, 0)) // Проверяем, заодно и выбираем её
{TicketLock=OrderTicket();} // Сохраняем тикет локирующего Buy
}
}
}
}
A partir de
//------------- Включение вывода убыточных позиций в ноль, если эквити упало на N процентов -----------------------
Para login e uso do site MQL5.com, você deve ativar o uso de cookies.
Ative esta opção no seu navegador, caso contrário você não poderá fazer login.
Você entrou na conta. A autenticação de dois fatores foi desativada. Configure-a novamente e escaneie um novo código QR ou continue com a autenticação de dois fatores desativada.
Conte altos e baixos não a partir da barra zero, mas a partir da primeira barra, na barra zero a Licitação não pode ser menor que a Mínima.
duplo
Min=Licit, declaração variável
Max=Licit,
____________________________________________________________________________________________
para (i=0;i<=20-1;i++) critérios de abertura
{if (Low[i]<Min) Min=Low[i]:
if (Alto[i]>Máximo) Max=Alto[i];
}
se (................. &&Ask>Max)
{
Opn_B=verdadeiro; //abrir Compra
}
se (................ &&Bid<Min)
{
Opn_S=verdadeiro; //venda aberta
}
___________________________________________________________________________________________
Lamento que seja tão feio - tive que escrevê-lo de memória, pois o código não funcionou e eu o apaguei. Mas você, como profissional, deve ser compreensível (espero).
____________________________________________________________________________________________
Você me lisonjeia :)) Sou um principiante, como você...
É mais ou menos assim. Não o verificou, apenas o escreveu no local.Portanto, aqui está a lógica:
1. Defina a ordem pendente com um número mágico, digamos 101, e zere a bandeira para converter a ordem em uma posição, digamos ConvOrd=false;
2. verificar se a posição com a 101 mágica apareceu; em caso afirmativo, colocar a bandeira de conversão ConvOrd=true;
3. verificar se ConvOrd==verdadeiro,
verificamos se a posição com o número mágico 101 existe - e se está faltando
significa que já está fechado.
{deselecione ConvOrd=falso; defina um novo pendente;}.
Acho que podemos passar sem bandeiras...
Entendo a lógica, mas não sei como implementá-la em código. Eu tentei muitas variantes, mas não obtive nenhum resultado. Eu acho que sou um boneco. É por isso que eu escrevi aqui. Na p.663 eu lhe mostrei meu código. Se você estiver interessado, por favor, me diga como melhorá-lo ou pelo menos me diga como melhorá-lo. Obrigado.
Tente uma maneira mais simples, quando fizer um pedido SellStop, lembre-se do valor do TakeProfit e se o Bid cair abaixo desse preço, coloque-o na Buy.
Tente uma maneira mais simples, quando você fizer um pedido SellStop, lembre-se do valor TakeProfit e se o Bid cair abaixo deste preço, coloque-o na Buy.
Obrigado pelo conselho! Já tentei esta opção, mas ela não é adequada para minha estratégia.
Não entendo porque há duas posições de fechamento ao mesmo tempo. A lógica é a seguinte:
Quando o patrimônio atinge uma certa porcentagem do lucro anterior, fechamos todas as posições. Isto funciona corretamente... A seguir...
Se o patrimônio cair uma certa porcentagem de seu valor anterior, procure a posição com maior perda, identifique quem é... Comprar ou Vender...
e abrir uma posição de travamento na direção oposta com lote duplo. Depois olhamos para seu lucro total (da posição de perda e travamento) e assim que ele se torna maior,
Digamos 10 pips, feche-os...
Logicamente, a equidade deve ser verificada no próximo tick e, se tudo estiver bem, continuamos trabalhando... Se tudo estiver bem novamente, teremos de procurar o próximo otário.
Mas, por alguma razão, abre duas posições de fechamento ao mesmo tempo. e Comprar e Vender, e se o lote foi 0,1, então o primeiro travamento abre o dobro do lote = 0,2,
e a segunda dobra-o novamente e abre com 0,4 lote ... Respectivamente, que diabos está ali, se estão lutando uns com os outros por um lugar sob o Sol ... :(
Estou anexando o código, talvez alguém possa me cutucar com seu... dedo.
A partir de
//------------- Включение вывода убыточных позиций в ноль, если эквити упало на N процентов -----------------------...há uma junta em algum lugar...
PÁGINA NÚMERO "666" :-)