[Arquivo!] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por ela. Não poderia ir a lugar algum sem você - 2. - página 291
Ajude, por favor, tenha um conselheiro para romper os fractais. Eu peguei bons parâmetros só preciso acrescentar que ele estabelece muito martingale (mais 2 quando você perde). Ou dar o poder sobre o conselheiro só vai dobrar o lote sem esperar por 2 para correr (se disponível):
como fazê-la retornar apenas por última ordem fechada e não por última ordem condicional,
acrescentei muita verificação ao código para minha conveniência
//+----------------------------------------------------------------------------+//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.05.2008 |//| Описание : Возвращает флаг закрытия последней позиции по стопу. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+bool isCloseLastPosByStop(string sy="", int op=-1, int mn=-1, int ll=-1) {
datetime t;
double ocp, osl;
int dg, i, j=-1, k=OrdersHistoryTotal();
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (ll<0 || OrderLots()==ll) {
if (t<OrderCloseTime()) {
t=OrderCloseTime();
j=i;
}
}
}
}
}
}
}
}
if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
dg=MarketInfo(sy, MODE_DIGITS);
if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
ocp=NormalizeDouble(OrderClosePrice(), dg);
osl=NormalizeDouble(OrderStopLoss(), dg);
if (ocp==osl) return(True);
}
return(False);
}
//+----------------------------------------------------------------------------+//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.05.2008 |//| Описание : Возвращает флаг закрытия последней позиции по тейку. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+bool isCloseLastPosByTake(string sy="", int op=-1, int mn=-1, int ll=-1) {
datetime t;
double ocp, otp;
int dg, i, j=-1, k=OrdersHistoryTotal();
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (ll<0 || OrderLots()==ll) {
if (t<OrderCloseTime()) {
t=OrderCloseTime();
j=i;
}
}
}
}
}
}
}
}
if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
dg=MarketInfo(sy, MODE_DIGITS);
if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
ocp=NormalizeDouble(OrderClosePrice(), dg);
otp=NormalizeDouble(OrderTakeProfit(), dg);
if (ocp==otp) return(True);
}
return(False);
}
Diga-me quem pode ajudar com o bloco Klimov, o problema é que ele não devolve o valor do último fechado, mas o valor do último fechado pela condição
assim em 2 condições
devolve ambos os valores Verdadeiro,
como fazê-la retornar apenas por última ordem fechada e não por última ordem condicional,
acrescentei muita verificação ao código para minha conveniência
Você adicionou o cheque de lotes a esta função? Agora eles verificam as últimas posições fechadas com o lote passado, e o lote é provavelmente sempre igual a zero, ou um inteiro. A variável deve ser do tipo duplo. Por que precisamos de muita verificação aqui, afinal?
Você escreve o que você quer alcançar, e eles lhe dirão :)
Verifique os lotes na função adicionados por você mesmo? Agora eles verificam as últimas posições fechadas com o lote passado, e o lote é provavelmente sempre igual a zero, ou um inteiro. A variável deve ser do tipo duplo. Por que precisamos de muita verificação aqui, afinal?
Você escreve o que você quer alcançar, e eles lhe dirão :)
Eu já consegui tudo, mas existe um bug, é em um certo momento uma ordem que eu não preciso aparecer,
Tentei mudá-lo para int, originalmente era o dobro, mas esqueci de devolvê-lo, e se eu usar uma função separada sem verificação de lote, o resultado não muda, então talvez eu não o tenha verificado corretamente, me ajude a entender o que está errado com este bug
este é o aspecto do pedido
вот так работает без проблем
bool BuystopLotA=isCloseLastPosByStop(NULL,OP_BUY,MagBuy,LotA);
bool BuyTakeLotA=isCloseLastPosByTake(NULL,OP_BUY,MagBuy,LotA);
bool SellstopLotC=isCloseLastPosByStop(NULL,OP_SELL,MagBuy,LotC);
bool SellTakeLotC=isCloseLastPosByTake(NULL,OP_SELL,MagBuy,LotC);
при добовлении вот этих запросов
bool BuystopLotB=isCloseLastPosByStop(NULL,OP_BUY,MagBuy,LotB);
bool BuyTakeLotB=isCloseLastPosByTake(NULL,OP_BUY,MagBuy,LotB);
начинает возвращять True не по одному а по двум запросам
BuyTakeLotB и BuystopLotA
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.
Ajude, por favor, tenha um conselheiro para romper os fractais. Eu peguei bons parâmetros só preciso acrescentar que ele estabelece muito martingale (mais 2 quando você perde). Ou dar o poder sobre o conselheiro só vai dobrar o lote sem esperar por 2 para correr (se disponível):
//+------------------------------------------------------------------+
|| Fractals.mq4 |
//| PARA |
//| http://www.forex-tradexperts-to.narod.ru |
//+------------------------------------------------------------------+
#propriedade copyright "TO
#link da propriedade "http://www.forex-tradexperts-to.narod.ru"
#incluir <WinUser32.mqh>.
externo int TP_Fract_3=300;
externo int SL_Fract_3=200;
externo int TP_Fract_11=500;
externo int SL_Fract_11=300;
external bool buy_Fract_3=true;
venda_Fracto_3=verdadeiro;
external bool buy_Fract_11=true;
venda_Fracto_11=verdadeiro;
podtvergdenie=false;
tofract=10;
lotes duplos externos=0,1;
ID int externo = 5452;
string com;
dupla propagação;
int init()
{
com=DoubleToStr(ID,0);
spread=MarketInfo(Symbol(),MODE_SPREAD)*Ponto;
retorno(0);
}
int deinit()
{
retorno(0);
}
data/hora t1,t2=0;
pedido de bool (preço duplo, tipo int, string c,int m)
{
int i;
for(i=OrdensTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderComment()==c && OrderMagicNumber()==m && OrderOpenPrice()==preço && OrderType()==tipo)return(false);
if(i==0)return(true);
}
if(OrdersTotal()==0)return(true);
}
int start()
{
int i,ret;
t1=Tempo[0];
if(t1!=t2)
{
int fract_buy_3=iHighest(Symbol(),Period(),MODE_HIGH,5,1);
int fract_sell_3=iLowest(Symbol(),Period(),MODE_LOW,5,1);
int fract_buy_11=iHighest(Symbol(),Period(),MODE_HIGH,21,1);
int fract_sell_11=iLowest(Symbol(),Period(),MODE_LOW,21,1);
if( fract_buy_3===3 && buy_Fract_3===verdadeiro)
{
if(OrderTotal()==0)if(order(order(high[fract_buy_3]+tofract*Point+spread,4,com,5))OrderSend(Symbol(),OP_BUYSTOP,lots,High[fract_buy_3]+tofract*Point+spread,10,High[fract_buy_3]+tofract*Point-SL_Fract_3*Point,High[fract_buy_3]+tofract*Point+spread+TP_Fract_3*Point,5);
for(i=OrdensTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderComment()===com && OrderMagicNumber()==5 && OrderType()==4)
{
OrderModify(OrderTicket(),High[fract_buy_3]+tofract*Point+spread, High[fract_buy_3]+tofract*Point-SL_Fract_3*Point, High[fract_buy_3]+tofract*Point+spread+TP_Fract_3*Point,0,Blue);
pausa;
}
if(i==0)if(order(order(high[fract_buy_3]+tofract*Point+spread,4,com,5))
{
if(podtvergdenie)
{
ret=MessageBox("Signal at "+Symbol()+" H1 BUYSTOP "+"{Set Order?", "Signal", MB_YESNO|MB_ICONQUESTION);
if(ret==IDYES)OrderSend(Symbol(),OP_BUYSTOP,lots,High[fract_buy_3]+tofract*Point+spread,10,High[fract_buy_3]+tofract*Point-SL_Fract_3*Point,High[fract_buy_3]+tofract*Point+spread+TP_Fract_3*Point,5);
}
if(!podtvergdenie)OrderSend(Symbol(),OP_BUYSTOP,lots,High[fract_buy_3]+tofract*Point+spread,10,High[fract_buy_3]+tofract*Point-SL_Fract_3*Point,High[fract_buy_3]+tofract*Point+spread+TP_Fract_3*Point,com,5);
}
}
}
if( fract_sell_3===3 && sell_Fract_3===verdadeiro)
{
if(OrderTotal()==0)if(order(Order(Low[fract_sell_3]-tofract*Point,5,com,5))OrderSend(Symbol(),OP_SELLSTOP,lots,Low[fract_sell_3]-tofract*Point,10,Baixo[fract_sell_3]+spread-tofract*Point+SL_Fract_3*Point,Baixo[fract_sell_3]-tofract*Point-TP_Fract_3*Point,com,5);
for(i=OrdensTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderComment()===com && OrderMagicNumber()==5 && OrderType()==5)
{
OrderModify(OrderTicket(),Low[fract_sell_3]-tofract*Point,Low[fract_sell_3]+spread-tofract*Point+SL_Fract_3*Point,Low[fract_sell_3]-tofract*Point-TP_Fract_3*Point,0,Red);
pausa;
}
if(i==0)if(order(Order(Low[fract_sell_3]-tofract*Point,5,com,5))
{
if(podtvergdenie)
{
ret=MessageBox("Sinal em "+Symbol()+"H1 SELLSTOP "+"{Set Order?", "Signal", MB_YESNO|MB_ICONQUESTION);
if(ret==IDYES)OrderSend(Symbol(),OP_SELLSTOP,lots,Low[fract_sell_3]-tofract*Point,10,Low[fract_sell_3]+spread-tofract*Point+SL_Fract_3*Point,Low[fract_sell_3]-tofract*Point-TP_Fract_3*Point,5);
}
if(!podtvergdenie)OrderSend(Symbol(),OP_SELLSTOP,lots,Low[fract_sell_3]-tofract*Point,10,Low[fract_sell_3]+spread-tofract*Point+SL_Fract_3*Point,Low[fract_sell_3]-tofract*Point*Point,com,5);
}
}
}
if( fract_buy_11==11 && buy_Fract_11===verdadeiro)
{
if(OrderTotal()==0)if(order(order(high[fract_buy_11]+tofract*Point+spread,4,com,21))orderSend(Symbol(),OP_BUYSTOP,lots,High[fract_buy_11]+tofract*Point+spread,10,High[fract_buy_11]+tofract*Point-SL_Fract_11*Point,High[fract_buy_11]+tofract*Point+spread+TP_Fract_11*Point,21);
for(i=OrdensTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderComment()===com && OrderMagicNumber()==21 && OrderType()==4)
{
OrderModify(OrderTicket(),High[fract_buy_11]+tofract*Point+spread, High[fract_buy_11]+tofract*Point-SL_Fract_11*Point, High[fract_buy_11]+tofract*Point+spread+TP_Fract_11*Point,0,Blue);
pausa;
}
if(i==0)if(order(order(high[fract_buy_11]+tofract*Point+spread,4,com,21))
{
if(podtvergdenie)
{
ret=MessageBox("Sinal em "+Symbol()+"H4 BUYSTOP "+"{Set Order?", "Signal", MB_YESNO|MB_ICONQUESTION);
if(ret==IDYES)OrderSend(Symbol(),OP_BUYSTOP,High[fract_buy_11]+tofract*Point+spread,10,High[fract_buy_11]+tofract*Point-SL_Fract_11*Point,High[fract_buy_11]+tofract*Point+spread+TP_Fract_11*Point,21);
}
if(!podtvergdenie)OrderSend(Symbol(),OP_BUYSTOP,lots,High[fract_buy_11]+tofract*Point+spread,10,High[fract_buy_11]+tofract*Point-SL_Fract_11*Point,High[fract_buy_11]+tofract*Point+spread+TP_Fract_11*Point,com,21);
}
}
}
if( fract_sell_11==11 && sell_Fract_11===verdadeiro)
{
if(OrderTotal()==0)if(order(Order(Low[fract_sell_11]-tofract*Point,5,com,21))orderSend(Symbol(),OP_SELLSTOP,lots,Low[fract_sell_11]-tofract*Point,10,Baixo[fract_sell_11]+spread-tofract*Point+SL_Fract_11*Point,Baixo[fract_sell_11]-tofract*Point-TP_Fract_11*Point,com,21);
for(i=OrdensTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderComment()===com && OrderMagicNumber()==21 && OrderType()==5)
{
OrderModify(OrderTicket(),Low[fract_sell_11]-tofract*Point,Low[fract_sell_11]+spread-tofract*Point+SL_Fract_11*Point,Low[fract_sell_11]-tofract*Point-TP_Fract_11*Point,0,Red);
pausa;
}
if(i==0)if(order(Order(Low[fract_sell_11]-tofract*Point,5,com,21))
{
if(podtvergdenie)
{
ret=MessageBox("Sinal em "+Symbol()+"H4 BUYSTOP "+"{Set Order?", "Signal", MB_YESNO|MB_ICONQUESTION);
if(ret==IDYES)OrderSend(Symbol(),OP_SELLSTOP,lots,Low[fract_sell_11]-tofract*Point,10,Low[fract_sell_11]+spread-tofract*Point+SL_Fract_11*Point,Low[fract_sell_11]-tofract*Point-TP_Fract_11*Point,21);
}
if(!podtvergdenie)OrderSend(Symbol(),OP_SELLSTOP,lots,Low[fract_sell_11]-tofract*Point,10,Low[fract_sell_11]+spread-tofract*Point+SL_Fract_11*Point,Low[fract_sell_11]-tofract*Point*Point,com,21);
}
}
}
t2=Tempo[0];
}
retorno(0);
}
Eu sou ruim em escrever russo, desculpe!
Eu não sou bom em escrever russo, desculpe!
Diga-me quem pode ajudar com o bloco Klimov, o problema é que ele não devolve o valor do último fechado, mas o valor do último fechado pela condição
assim em 2 condições
devolve ambos os valores Verdadeiro,
como fazê-la retornar apenas por última ordem fechada e não por última ordem condicional,
acrescentei muita verificação ao código para minha conveniência
Diga-me quem pode ajudar com o bloco Klimov, o problema é que ele não devolve o valor do último fechado, mas o valor do último fechado pela condição
assim em 2 condições
devolve ambos os valores Verdadeiro,
como fazê-la retornar apenas por última ordem fechada e não por última ordem condicional,
acrescentei muita verificação ao código para minha conveniência
Você adicionou o cheque de lotes a esta função? Agora eles verificam as últimas posições fechadas com o lote passado, e o lote é provavelmente sempre igual a zero, ou um inteiro. A variável deve ser do tipo duplo. Por que precisamos de muita verificação aqui, afinal?
Você escreve o que você quer alcançar, e eles lhe dirão :)
Sim, e por que o lote é um int? O lote sempre foi o dobro.
Você poderia fazer isso, quando ainda tiver uma ordem, determinar qual ordem é deixada e procurar a ordem oposta.
Diga-me quem pode ajudar com o bloco Klimov...
Verifique os lotes na função adicionados por você mesmo? Agora eles verificam as últimas posições fechadas com o lote passado, e o lote é provavelmente sempre igual a zero, ou um inteiro. A variável deve ser do tipo duplo. Por que precisamos de muita verificação aqui, afinal?
Você escreve o que você quer alcançar, e eles lhe dirão :)
Eu já consegui tudo, mas existe um bug, é em um certo momento uma ordem que eu não preciso aparecer,
Tentei mudá-lo para int, originalmente era o dobro, mas esqueci de devolvê-lo, e se eu usar uma função separada sem verificação de lote, o resultado não muda, então talvez eu não o tenha verificado corretamente, me ajude a entender o que está errado com este bug
este é o aspecto do pedido
Sim, e por que o lote é um int? O lote sempre foi o dobro.
Você poderia fazer isso, quando ainda tiver uma ordem, determinar qual ordem é deixada e procurar a ordem oposta.
não é tão simples porque as condições de abertura podem ser 2 na venda, e então esta busca não vai encontrar nada
Não duplique os postes em fios diferentes, é má forma.
Desculpe, vou me esforçar mais para lembrar de apagar os mesmos postes de fios diferentes,