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
Seu exemplo é um exemplo melhor.
[/quote]
Este exemplo não funciona. Dá erros. Você poderia, como um desenvolvedor mais experiente, ajudar a fazer funcionar?
Respeitosamente,
Quark
este é um cheque para ver se eles querem fechar o Expert Advisor externamente
Pergunta: estes enquanto e Sleep não irão retardar o sistema?
o sistema não será desacelerado. apenas o único Expert Advisor
Pergunta: o sono e o semáforo serão processados corretamente em modo de teste?
o escorregamento não é tratado em testes, ele simplesmente é pulado. é mais complicado em testes. os EAs realmente ativos podem competir por este semáforo. não precisamos de semáforos em testes, já que apenas um EA é testado - não podemos organizar testes simultâneos de Especialistas em interação. para excluir o manuseio de semáforos em testes, use a função IsTesting
Também no que diz respeito à lógica. Entre o ajuste e a remoção do semáforo, temos duas (máximas) possibilidades para tratar as ordens. Primeiro Comprar() ou Vender() e depois, abaixo, FecharOrdem(). Essas duas "atividades" não irão competir entre si, embora dentro da EA, como se houvesse dois Conselheiros Especializados? Ou o processo é garantidamente linear e não chegará ao CloseOrder() até que a Buy() retorne?
Estas atividades não competirão entre si, uma vez que as operações comerciais estão agora sincronizadas, ou seja, os especialistas esperam até que a operação comercial seja concluída. "o processo tem a garantia de ser linear"
Não vou forçá-lo. Espere alguns dias para a função GlobalVariableSetOnCondition, então todos os problemas de controle de acesso serão resolvidos
Não vou forçá-lo. aguarde alguns dias pela função GlobalVariableSetOnCondition, então todos os problemas de delimitação de acesso serão resolvidos
Se você quer dizer que pretende introduzir a função GlobalVariableSetOnCondition na MT, poderia dizer algumas palavras antes sobre isso?
Incluindo como você se propõe a usá-lo nesta situação?
Um par de dias - contando fins de semana?
Por que você não faz uma fila de pedidos em MT. Ou seja, você pode escrever assincronamente uma solicitação para trabalhar em uma posição lá, e a MT em uma linha separada processará essa solicitação quando houver tempo, e com a garantia de que ninguém mais entrará lá.
Quark
Incluindo como você se propõe a usá-lo nesta situação?
Um par de dias - contando fins de semana?
Já mostrei um exemplo
if(GlobalVariableSetOnCondition(SemaporeName, 1.0, 0.0)==verdadeiro) { bSemaphored=verdadeiro; break; }se uma variável global tem um valor 0,0, então defina o valor para 1,0 e retorne verdadeiro. caso contrário, não defina nada. verifique e altere o valor em uma chamada de função.
"um par de dias" - eu disse que, por via das dúvidas, esperamos publicá-lo hoje.
Não faremos uma fila de pedidos
Só não disse o que é :) Pensei que a função tinha sido sugerida para me escrever.
Eu disse "um par de dias" só para o caso de. Esperamos publicá-lo hoje.
Obrigado.
1. Nesses 100 posts foram encontrados vários bugs enquanto trabalhavam no Expert Advisor, e não diretamente relacionados a ele. Por exemplo, notei que os Expert Advisors continuam negociando mesmo após a remoção da caixa de seleção Allow Live Trading. Espero que você não os esqueça.
2. Abaixo está novamente o código do meu Conselheiro Especialista. Ela gera erros 1, 129, 138. Você poderia a) me dizer o que é 138(requote), por que ocorre, se está relacionado a semáforos, e como consertá-lo? b) Por que 129? Os preços são impressos junto com o erro, eles parecem estar corretos. c) Cerca de 1, também.
Deixe-me lembrá-lo do método de teste: janelas de 12 minutos para 12 moedas.
Respeitosamente,
Quark
double dStopLoss; int nHoursToHold; datetime timePrev = 0; int nBars; int nDelaySeconds = 3; int nSlip = 50; double dLotSize = 0.1; int nMagic = 0; int nDigits; string strTradeSemaphore = "TradeSemaphore"; ////////////////// int init () { nBars = Bars; if(!IsTesting() && !GlobalVariableCheck(strTradeSemaphore)) GlobalVariableSet(strTradeSemaphore, 0.0); dStopLoss = 110 * Point; nHoursToHold = 1; nDigits = MarketInfo( Symbol(), MODE_DIGITS ); if(Symbol() == "EURUSD") nMagic = 1; else if(Symbol() == "EURJPY") nMagic = 2; else if(Symbol() == "USDCHF") nMagic = 3; else if(Symbol() == "GBPUSD") nMagic = 4; else if(Symbol() == "GBPJPY") nMagic = 5; else if(Symbol() == "GBPCHF") nMagic = 6; else if(Symbol() == "USDJPY") nMagic = 7; else if(Symbol() == "AUDUSD") nMagic = 8; else if(Symbol() == "EURGBP") nMagic = 9; else if(Symbol() == "USDCAD") nMagic = 10; else if(Symbol() == "EURCHF") nMagic = 11; else if(Symbol() == "EURAUD") nMagic = 12; return(0); } // ------ int deinit() { return(0); } // ------ int start() { if(Bars < 5) return(0); /* // The previous bar just closed bool bIsBarEnd = false; if(timePrev != Time[0] + nMagic) bIsBarEnd = true; timePrev = Time[0] + nMagic; */ bool bIsBarEnd = false; if(nBars != Bars) { if(IsTesting() || (!IsTesting() && CurTime() > Time[0] + nMagic * nDelaySeconds)) { bIsBarEnd = true; nBars = Bars; } } if(!bIsBarEnd) return(0); // ------ if(!IsTesting()) { while(!IsStopped()) { if(GlobalVariableGet(strTradeSemaphore) == 0.0) GlobalVariableSet(strTradeSemaphore, nMagic); if(GlobalVariableGet(strTradeSemaphore) == nMagic) break; Sleep(1000); } } for(int nCnt = OrdersTotal() - 1; nCnt >= 0; nCnt--) { OrderSelect(nCnt, SELECT_BY_POS, MODE_TRADES); if(OrderMagicNumber() == nMagic) { if(CurTime() - OrderOpenTime() > (nHoursToHold - 1) * 60 * 60) { if(OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, nSlip, Aqua); else if(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, nSlip, OrangeRed); } } } int nSignal = GetSignal(); if(nSignal == OP_BUY) Buy(); else if(nSignal == OP_SELL) Sell(); if(!IsTesting()) GlobalVariableSet(strTradeSemaphore, 0.0); return(0); } // ------ void Sell() { if(AccountFreeMargin() < 500) return; dLotSize = GetLotSize(); double dNormalizer = MathPow(10, nDigits); double dBid = Bid;//MathFloor(Bid * dNormalizer) / dNormalizer; //NormalizeDouble(Bid, nDigits); double dStop = Bid + dStopLoss;//MathFloor((Bid + dStopLoss) * dNormalizer) / dNormalizer; //NormalizeDouble(Bid + dStopLoss, nDigits); int nResult = OrderSend(Symbol(), OP_SELL, dLotSize, dBid, nSlip, dStop, 0, "Friday", nMagic, 0, OrangeRed); if(nResult == -1) { int nError = GetLastError(); Alert(Symbol() + ", sell: " + dBid + ", Stop: " + dStop + ", error: " + nError); } } // ------ void Buy() { if(AccountFreeMargin() < 500) return; dLotSize = GetLotSize(); double dNormalizer = MathPow(10, nDigits); double dAsk = Ask;//MathFloor(Ask * dNormalizer) / dNormalizer; //NormalizeDouble(Bid, nDigits); double dStop = Ask - dStopLoss;//MathFloor((Ask - dStopLoss) * dNormalizer) / dNormalizer; //NormalizeDouble(Bid + dStopLoss, nDigits); int nResult = OrderSend(Symbol(), OP_BUY, dLotSize, dAsk, nSlip, dStop, 0, "Friday", nMagic, 0, Aqua); if(nResult == -1) { int nError = GetLastError(); Alert(Symbol() + ", buy: " + dAsk + ", Stop: " + dStop + ", error: " + nError); } } // ------ double GetLotSize() { double dLot = 0.1; return(dLot); } // ------ int GetSignal() { int nSignal; if(MathMod(Hour(), 2) == 0) nSignal = OP_BUY; else nSignal = OP_SELL; return(nSignal); }