[ARQUIVO] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 3. - página 94
Especificamente, aqui se ( OrderType( )==OP_BUY && OrderType( )==OP_SELL )
Bem, é claro que o pedido pode ser tanto de compra como de venda, mas eu colocaria ||||
LOL!!! Sim, eu fiz... A sério...
se (NormalizeDouble(OrderClosePrice()-OrderTakeProfit(), Digits)<0,5*Point)
Recomendo esclarecer quem é o ponto e por que ele é multiplicado por 0,5? É que a variante sem normalizar o doublet não é tão confiável se você a comparar com zero. Aqui funciona.
O bilhete é um tipo inteiro, OrderClose é booleano. É melhor não fazer dessa forma.
enquanto o loop é infinito e apenas as ordens do mercado são eliminadas, se houver uma pendente, esta música será eterna. Obrigado!!! !!!!
//+------------------------------------------------------------------+//| AsctrendBuySellExpert_v1.mq4 code by Newdigital |//| https://www.forex-tsd.com |//| using Gordago software http://www.gordago.com |//| - Asctrend code for this EA was taken from |//| AscTrend_NonLag EA coded by of Igorad. |//| - "Non-Trading Hours" on the screen fixing code by Locutus |//| from Updated DayTradingMM EA |//+------------------------------------------------------------------+#property copyright "newdigital"#property link "https://www.forex-tsd.com"#include <stderror.mqh> // библиотека ошибок#include <stdlib.mqh>externint MAGIC = 100111;
externstring PARAMETERS_EXPERT = "PARAMETERS EXPERT";
externcolor clOpenBuy = Blue;
externcolor clCloseBuy = Aqua;
externcolor clOpenSell = Red;
externcolor clCloseSell = Violet;
externcolor clModiBuy = Blue;
externcolor clModiSell = Red;
externstring Name_Expert = "AsctrendBuySellExpert";
externbool UseSound = False;
externstring NameFileSound = "alert.wav";
externstring PARAMETERS_FILTER = "PARAMETERS FILTER";
externbool UseHourTrade = False;
externint FromHourTrade = 8;
externint ToHourTrade = 18;
externstring PARAMETERS_TRADE = "PARAMETERS TRADE";
externdouble Lots = 0.10;
externint Slippage = 4;
externdouble lStopLoss = 1000;
externdouble sStopLoss = 1000;
externdouble lTakeProfit = 1000;
externdouble sTakeProfit = 1000;
externdouble lTrailingStop = 1000;
externdouble sTrailingStop = 1000;
externstring PARAMETERS_INDICATOR_ONE = "ASCTrend";
externbool UseASCtrend = True;
externint RISK = 3;
int asctrend,asctrend1;
int ASCtrend,ASCtrend1;
void deinit() {
Comment("");
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+int start(){
if (UseHourTrade){
if((Hour()>=FromHourTrade)&&(Hour()<=ToHourTrade))
Comment("Trading Hours");
else
{
Comment("Non-trading Hours");
return(0);
}
}
if(Bars<100){
Print("bars less than 100");
return(0);
}
if(lStopLoss<10){
Print("StopLoss less than 10");
return(0);
}
if(lTakeProfit<10){
Print("TakeProfit less than 10");
return(0);
}
if(sStopLoss<10){
Print("StopLoss less than 10");
return(0);
}
if(sTakeProfit<10){
Print("TakeProfit less than 10");
return(0);
}
if (UseASCtrend)
{
ASCtrend = ASCTrend(RISK);
bool ASCtrendBuy = ASCtrend>0 && ASCtrend1<0;
bool ASCtrendSell = ASCtrend<0 && ASCtrend1>0;
}
else {ASCtrendBuy = true; ASCtrendSell = true;}
if(AccountFreeMargin()<(1000*Lots)){
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
if (!ExistPositions()){
if ((ASCtrendBuy)){
OpenBuy();
return(0);
}
if ((ASCtrendSell)){
OpenSell();
return(0);
}
}
if (ExistPositions()){
if(OrderType()==OP_BUY){
if ((ASCtrendSell)){
CloseBuy();
return(0);
}
}
if(OrderType()==OP_SELL){
if ((ASCtrendBuy)){
CloseSell();
return(0);
}
}
}
TrailingPositionsBuy(lTrailingStop);
TrailingPositionsSell(sTrailingStop);
ASCtrend1=ASCtrend;
return (0);
}
bool ExistPositions() {
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) {
return(True);
}
}
}
return(false);
}
void TrailingPositionsBuy(int trailingStop) {
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) {
if (OrderType()==OP_BUY) {
if (Bid-OrderOpenPrice()>trailingStop*Point) {
if (OrderStopLoss()<Bid-trailingStop*Point)
ModifyStopLoss(Bid-trailingStop*Point);
}
}
}
}
}
}
void TrailingPositionsSell(int trailingStop) {
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) {
if (OrderType()==OP_SELL) {
if (OrderOpenPrice()-Ask>trailingStop*Point) {
if (OrderStopLoss()>Ask+trailingStop*Point || OrderStopLoss()==0)
ModifyStopLoss(Ask+trailingStop*Point);
}
}
}
}
}
}
void ModifyStopLoss(double ldStopLoss) {
bool fm;
fm = OrderModify(OrderTicket(),OrderOpenPrice(),ldStopLoss,OrderTakeProfit(),0,CLR_NONE);
if (fm && UseSound) PlaySound(NameFileSound);
}
void CloseBuy() {
bool fc;
fc=OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, clCloseBuy);
if (fc && UseSound) PlaySound(NameFileSound);
}
void CloseSell() {
bool fc;
fc=OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, clCloseSell);
if (fc && UseSound) PlaySound(NameFileSound);
}
void OpenBuy() {
double ldLot, ldStop, ldTake;
string lsComm;
ldLot = GetSizeLot();
ldStop = GetStopLossBuy();
ldTake = GetTakeProfitBuy();
lsComm = GetCommentForOrder();
BroCoOrderSend(Symbol(),OP_BUY,ldLot,Ask,Slippage,ldStop,ldTake,lsComm,MAGIC,0,clOpenBuy);
if (UseSound) PlaySound(NameFileSound);
}
void OpenSell() {
double ldLot, ldStop, ldTake;
string lsComm;
ldLot = GetSizeLot();
ldStop = GetStopLossSell();
ldTake = GetTakeProfitSell();
lsComm = GetCommentForOrder();
BroCoOrderSend(Symbol(),OP_SELL,ldLot,Bid,Slippage,ldStop,ldTake,lsComm,MAGIC,0,clOpenSell);
if (UseSound) PlaySound(NameFileSound);
}
string GetCommentForOrder() { return(Name_Expert); }
double GetSizeLot() { return(Lots); }
double GetStopLossBuy() { return (Bid-lStopLoss*Point);}
double GetStopLossSell() { return(Ask+sStopLoss*Point); }
double GetTakeProfitBuy() { return(Ask+lTakeProfit*Point); }
double GetTakeProfitSell() { return(Bid-sTakeProfit*Point); }
int ASCTrend( int risk )
{
double smin, smax, bsmin, bsmax;
int len = 3 + 2*risk;
smin=Low[Lowest(NULL,0,MODE_LOW,len,1)];
smax=High[Highest(NULL,0,MODE_HIGH,len,1)];
bsmax = smax-(smax - smin)*(33.0-risk)/100.0;
bsmin = smin+(smax - smin)*(33.0-risk)/100.0;
asctrend = asctrend1;
if(Close[1]>bsmax) asctrend= 1;
if(Close[1]<bsmin) asctrend=-1;
asctrend1 = asctrend;
return(asctrend);
}
//+------------------------------------------------------------------+//| Функция для работы с дилинговым центром BroCo |//+------------------------------------------------------------------+int BroCoOrderSend(string symbol,
int cmd,
double volume,
double price,
int slippage,
double stoploss,
double takeprofit,
string comment,
int magic,
datetime expiration,
color arrow_color)
{
int ticket = OrderSend(symbol,cmd, volume, price, slippage, 0, 0, comment, magic, expiration, arrow_color);
int check = -1;
if (ticket > 0 && (stoploss != 0 || takeprofit != 0)) {
if (!OrderModify(ticket, price, stoploss, takeprofit,expiration, arrow_color)) {
check = GetLastError();
if (check != ERR_NO_ERROR) {
Print("OrderModify error: ", ErrorDescription(check));
}
}
} else {
check = GetLastError();
if (check != ERR_NO_ERROR){
Print("OrderSend error: ",ErrorDescription(check));
}
}
return (ticket);
}
//----------------------------------------------------------------
Olá a todos! Encontrei um velho especialista trabalhando com o indicador de ascendência. Gostaria de verificar como este indicador se comporta em tempo real, mas nem sempre posso seguir os pontos e minha negociação não está cheia. Eu verifiquei o testador, há um sinal em cada ponto, mas coloquei-o em uma demonstração e notei que a demonstração salta sinais, enquanto o registro não escrevia nada para o especialista, escavar o código e não entendia qual era o problema :( talvez alguém mete o nariz no que pode ser o problema?
if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
if (NormalizeDouble(OrderClosePrice()-OrderTakeProfit(), Digits)<0.5*Point) {
Alert("Позиция с тикетом #",OrderTicket()," закрыта по TakeProfit, закрываем остальные прозиции и удаляем отложенные ордера");
// Здесь код для закрытия всех открытых позиций (тоже в цикле)for ( int y=OrdersTotal()-1; y>=0; y--) {Alert ("Здесь код для закрытия всех открытых позиций (тоже в цикле)",y);
OrderSelect(y, SELECT_BY_POS );
if ( OrderType( )==OP_BUY || OrderType( )==OP_SELL ){
OrderClose( OrderTicket( ), OrderLots( ), OrderClosePrice( ) , 0, CLR_NONE);
Alert ("OrderClose-vse-2", GetLastError( ) ); C=0;A=1; }}
// Здесь код для удаления всех отложенных ордеров (также в цикле)for ( int f=OrdersTotal()-1; f>=0; f--) {Alert("Здесь код для удаления всех отложенных ордеров (также в цикле)",f);
OrderSelect(f, SELECT_BY_POS );
if ( OrderType( )==OP_BUYSTOP || OrderType( )==OP_SELLSTOP ){
OrderDelete(OrderTicket( )) ; Alert ("OrderDelete-vse-2", GetLastError( ) ); }} // CloseAll();
}
}
Eu escrevi até agora, e apenas a primeira mensagem de alerta é registrada
O MetaEditor parou de funcionar após a reinstalação do terminal. Só funciona se você não mudar nada no código indicador. Se você mudar algo, mesmo a cor da linha, isso gera um erro:
O sistema operacional é o Windows 7. Quem sabe, talvez alguém tenha enfrentado tal falha. Você pode me dizer o que devo fazer?
Pessoal de código longo! Gostaria de reiterar que o código de outra pessoa é, antes de tudo, um criptograma, que ainda não foi decifrado! E isso é muito trabalho! Você acha que algum programador quer cavar quilômetros de listagem? Deixe-me dar meu código a um de vocês por apenas três mil linhas e pedir para eliminar um pequeno mal-entendido deste código. Você acha que só quer entrar na minha cabeça? Duvido novamente. Portanto, tenho um pedido a lhe fazer - quando você fizer uma pergunta-chave, descreva o problema o mais brevemente possível e, ao mesmo tempo, faça com que a descrição seja suficiente para entender sua essência. Caso contrário, seu grito é um grito no vazio. O código pode ser anexado ao correio. Tudo isso é necessário e suficiente.
Saudações a todos!
Por favor, ajude com este problema: não consigo fazer com que o indicador redesenha com o aparecimento de uma nova barra (intervalo D). П
Tenho que reiniciá-la manualmente.
é possível fazer o download do indicador de onda zolliot
É claro que você pode. Você precisa encontrar e baixar
zlliot siteindicador de onda:mql4.com
Obrigado, splxgf !!!!!!!!!!!!!!!
Especificamente, aqui se ( OrderType( )==OP_BUY && OrderType( )==OP_SELL )
Bem, é claro que o pedido pode ser tanto de compra como de venda, mas eu colocaria ||||
LOL!!! Sim, eu fiz... A sério...
se (NormalizeDouble(OrderClosePrice()-OrderTakeProfit(), Digits)<0,5*Point)
Recomendo esclarecer quem é o ponto e por que ele é multiplicado por 0,5? É que a variante sem normalizar o doublet não é tão confiável se você a comparar com zero. Aqui funciona.
O bilhete é um tipo inteiro, OrderClose é booleano. É melhor não fazer dessa forma.
enquanto o loop é infinito e apenas as ordens do mercado são eliminadas, se houver uma pendente, esta música será eterna. Obrigado!!! !!!!
Rapazes, digam-me a diferença ?????
if(OrderSymbol()!=Symbol())continue;
и
if(OrderSymbol()==Symbol())
???????????
Sim, eu não sei... Bem, continue; deve enviar para o laço anterior, e provavelmente pode passar até que corresponda, dependendo de como está escrito.
Ajuda !!!!!!! (meu post na página anterior)!
O MetaEditor parou de funcionar após a reinstalação do terminal. Só funciona se você não mudar nada no código indicador. Se você mudar algo, mesmo a cor da linha, isso gera um erro:
O sistema operacional é o Windows 7. Quem sabe, talvez alguém tenha enfrentado tal falha. Você pode me dizer o que devo fazer?