[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 285
Pensei nisso e o acrescentei para comprar. Os pedidos serão fechados não somente pela BUY, mas também pela SHELL.
Eu inseri a função isCloseLasPosByTake() no final.
2;116;C:\Program Files\MetaTrader - Alpari\experts\SimpleMA22333.mq4;104:33;'(' - function definition unexpected
2;75;C:\Program Files\MetaTrader - Alpari\experts\SimpleMA22333.mq4;109:7;'sy' - variable not defined
2;75;C:\Program Files\MetaTrader - Alpari\experts\SimpleMA22333.mq4;109:14;'sy' - variable not defined
2;75;C:\Program Files\MetaTrader - Alpari\experts\SimpleMA22333.mq4;112:27;'sy' - variable not defined
2;75;C:\Program Files\MetaTrader - Alpari\experts\SimpleMA22333.mq4;112:33;'sy' - variable not defined
2;75;C:\Program Files\MetaTrader - Alpari\experts\SimpleMA22333.mq4;114:15;'op' - variable not defined
2;75;C:\Program Files\MetaTrader - Alpari\experts\SimpleMA22333.mq4;114:37;'op' - variable not defined
2;75;C:\Program Files\MetaTrader - Alpari\experts\SimpleMA22333.mq4;115:17;'mn' - variable not defined
2;75;C:\Program Files\MetaTrader - Alpari\experts\SimpleMA22333.mq4;115:46;'mn' - variable not defined
2;75;C:\Program Files\MetaTrader - Alpari\experts\SimpleMA22333.mq4;116:19;'t' - variable not defined
2;75;C:\Program Files\MetaTrader - Alpari\experts\SimpleMA22333.mq4;117:17;'t' - variable not defined
2;75;C:\Program Files\MetaTrader - Alpari\experts\SimpleMA22333.mq4;127:19;'sy' - variable not defined
Aqui está uma torta, ou como estava dizendo pfc Gotsman pintura a óleo. ajude o boneco a sair.... não sabe nada.......
Eu escrevi especificamente no meu posto. Que esta função éCloseLastPosByTake() - deve ser colocada no final do código, ANTES da FUNÇÃO DE INÍCIO!
E onde você o colocou?
E tenha cuidado com os parênteses encaracolados nas condições de compra e venda. É claro que estão faltando lá (verifique - que o número de parênteses abertos é igual ao número de parênteses fechados). Aqui foi corrigida a venda :
Eu preciso de ajuda! Peço desculpas por não ter sido modesto.
Mas aqui está meu problema, tenho um EA que é baseado em um Martin, ele coloca a primeira encomenda VENDA ou COMPRA, o que eu quiser, mas eu quero poder escolher COMPRAR ou VENDER em propriedades EA. Isto é, eu coloco, por exemplo, COMPRAR em suas propriedades e abre um pedido de COMPRA apenas, ou o contrário.
Receio ainda não ter aprendido a programar na MQL4 .
Estou anexando o próprio conselheiro.
Agradecemos antecipadamente àqueles que responderão!
Eu escrevi especificamente no meu posto. Que esta função éCloseLastPosByTake() - deve ser colocada no final do código, ANTES da FUNÇÃO DE INÍCIO!
E onde você o colocou?
E preste mais atenção com parênteses curvos nas condições de compra e venda. É claro que estão faltando lá (verifique - que o número de parênteses abertos é igual ao número de parênteses fechados). Aqui está a solução para a venda :
Coloquei-o depois do início fi, por isso entendo.....
Enganei-me então, obrigado pelo cutucão :-))
Se eu acertei, deve ser colocado após } no final do bloco de função de desinicialização de especialistas ??????? ou após o retorno(0); no final mesmo do start-???????
Obrigado antecipadamente por sua paciência!!!!!!!!!
Coloquei-a após a função de início, portanto entendo.....
Enganei-me, obrigado pelo cutucão :-))
Se entendi corretamente, deve ser colocado após } no final do bloco de função de desinicialização de especialistas ??????? ou após o retorno(0); no final mesmo do início-???????
Obrigado antecipadamente por sua paciência!!!!!!!!!
Deve ser colocado do lado de fora. Não dentro de qualquer função, - mas como uma função independente separada.
Assim:
int start(){//----// Узнаем уровень стопов и спрэдint Spread =MarketInfo(Symbol(),MODE_SPREAD);int StopLevel =MarketInfo(Symbol(),MODE_STOPLEVEL);// Рассчитываем значения средних на 0-ом и 1-ом барахdouble MAF_0 =iMA(NULL,0, MAFP,0,1,1,0);double MAF_1 =iMA(NULL,0, MAFP,0,1,1,1);double MAS_0 =iMA(NULL,0, MASP,0,1,1,0);double MAS_1 =iMA(NULL,0, MASP,0,1,1,1);// открытие позиции Buy покупкаif( MAF_1 < MAS_1 && MAF_0 > MAS_0){if( isCloseLastPosByTake(NULL,OP_SELL, MagicNumber)==true){if( CheckOrders(OP_SELL)){if( StopLoss <= StopLevel+ Spread)double SL =0;else SL =Ask- StopLoss*Point;if( TakeProfit <= StopLevel- Spread)double TP =0;else TP =Ask+ TakeProfit*Point;if(!OrderSend(Symbol(),OP_BUY, Lots,Ask,5, SL, TP,NULL, MagicNumber))Print("Не открыт ордер Buy. Ошибка №",GetLastError());}}}//-------------------Конец покупки -----------------------// ----- Открытие позиции Sell продажа------------ if( MAF_1 > MAS_1 && MAF_0 < MAS_0){if( isCloseLastPosByTake(NULL,OP_BUY, MagicNumber)==true){if( CheckOrders(OP_BUY)){if( StopLoss <= StopLevel+ Spread)
SL =0;else SL =Bid+ StopLoss*Point;if( TakeProfit <= StopLevel- Spread)
TP =0;else TP =Bid- TakeProfit*Point;if(!OrderSend(Symbol(),OP_SELL, Lots,Bid,5, SL, TP,NULL, MagicNumber))Print("Не открыт ордер Sell. Ошибка №",GetLastError());}}}//---конец блока продажи ------------------------------//----return(0);}//+----------КОНЕЦ ФУНКЦИИ СТАРТ -------------------+//ЖЖЖЖЖЖЖ Другие вызываемые пользовательские функции ЖЖЖЖЖЖ//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. 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){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( 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);}
Não tenho certeza de que sob estas condições, o Assessor Especialista irá trabalhar. Porque a primeira posição não poderá ser aberta.
A função éCloseLastPosByTake() deve ser removida de uma condição de Compra ou Venda.
Mas aqui está meu problema, tenho um EA que é baseado em um Martin, ele coloca a primeira encomenda VENDA ou COMPRA, o que eu quiser, mas eu quero poder escolher COMPRAR ou VENDER em propriedades EA. Isto é, eu coloco por exemplo COMPRAR em suas propriedades e abre um pedido de COMPRA apenas, ou vice versa.
Estou anexando a própria EA.
Agradecemos antecipadamente a todos que responderem!
É improvável que alguém responda. A EA é descompilada (hackeada) e tais arquivos não são bem-vindos aqui...
Decidi estudar a MQL 4, uma vez que tudo o que encontrei não corresponde às minhas aspirações. No momento estou estudando a fim de entender como os profissionais trabalham e melhorá-lo para minha idéia. Há uma função personalizada (simples e pequena, uma página), o código é anexado. Devido ao meu amadorismo, não consigo entender por dois dias- o que esta função retorna como resultado, e qual condição aninhada é a Otra?
Alguém gostaria de plantar uma centelha de conhecimento no meu entorpecimento?
O que eu recebo é isto:
O objetivo da função é determinar se já existe um pedido feito para este par e, se existe, determinar seu tipo.
A função que chamou esta função aguarda a presença de uma das ordens selecionadas no procedimento interruptor, A função deve retornar "1", na presença de duas ordens- "2", e na ausência de ordens "-1".
O ciclo é iniciado sel_pos_16= 0. Vamos assumir que temos quatro pedidos pendentes no total para alguns pares, incluindo dois no par onde a EA está trabalhando e eles não são os primeiros.
Entretanto, na primeira iteração do laço, a função if(OrderSelect(l_pos_16, SELECT_BY_POS, MODE_TRADES)) Verifique a posição com o número "0" na lista de ordens, mas não existe tal posição (porque entendo que a numeração começa a partir da posição 1) e depois passará para a próxima. senão com saída completa de fCountOrders(int &a_count_0, int &a_count_4, int &a_count_8, int &a_count_12) com retorno do valorRetorno(-1).
Para meu entendimento, o sentido da função como um todo se perde, uma vez que o resultado deve ser o mesmo, quer haja ou não qualquer ordem para o par.
Entretanto, quando a EA funciona, esta função define e dá a você o que a chamada função espera dela, que então funciona de acordo com o resultado obtido .
Eu também não entendo o que senãoRetorno(-1) trabalhará em
se (OrderSelect(l_pos_16, SELECT_BY_POS, MODE_TRADES)) {
Ou mesmo emif (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic_N) {
O código da função:
int fCountOrders(int &a_count_0, int &a_count_4, int &a_count_8, int &a_count_12)
a_count_0= 0;
a_count_4 = 0;
a_count_8 = 0;
a_count_12 = 0;
gi_252 = 0;
para (int l_pos_16 = 0; l_pos_16 < OrderTotal(); l_pos_16++) {
se (OrderSelect(l_pos_16, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic_N) {
Talvez a função https://www.mql5.com/ru/forum/107476/page21 possa ajudar.
Função isCloseLastPosByTake().
Esta função retorna uma bandeira para fechar a última posição na tomada.
Flag up - True - TakeProfit foi acionado.
Bandeira arriada - Falsa - posição foi fechada devido a outro motivo.
A função em si deve ser colocada logo no final do código. Eu também acrescento à condição de vender:
Bom dia, noite ou manhã para todos VOCÊS.
Eu fiz tudo como o escrevi. Coloquei a função no final do código e a acrescentei às minhas condições de venda.
Pensei nisso e o acrescentei para comprar. Os pedidos serão fechados não somente pela BUY, mas também pela SHELL.
Eu inseri a função isCloseLasPosByTake() no final.
2;116;C:\Program Files\MetaTrader - Alpari\experts\SimpleMA22333.mq4;104:33;'(' - function definition unexpected 2;75;C:\Program Files\MetaTrader - Alpari\experts\SimpleMA22333.mq4;109:7;'sy' - variable not defined 2;75;C:\Program Files\MetaTrader - Alpari\experts\SimpleMA22333.mq4;109:14;'sy' - variable not defined 2;75;C:\Program Files\MetaTrader - Alpari\experts\SimpleMA22333.mq4;112:27;'sy' - variable not defined 2;75;C:\Program Files\MetaTrader - Alpari\experts\SimpleMA22333.mq4;112:33;'sy' - variable not defined 2;75;C:\Program Files\MetaTrader - Alpari\experts\SimpleMA22333.mq4;114:15;'op' - variable not defined 2;75;C:\Program Files\MetaTrader - Alpari\experts\SimpleMA22333.mq4;114:37;'op' - variable not defined 2;75;C:\Program Files\MetaTrader - Alpari\experts\SimpleMA22333.mq4;115:17;'mn' - variable not defined 2;75;C:\Program Files\MetaTrader - Alpari\experts\SimpleMA22333.mq4;115:46;'mn' - variable not defined 2;75;C:\Program Files\MetaTrader - Alpari\experts\SimpleMA22333.mq4;116:19;'t' - variable not defined 2;75;C:\Program Files\MetaTrader - Alpari\experts\SimpleMA22333.mq4;117:17;'t' - variable not defined 2;75;C:\Program Files\MetaTrader - Alpari\experts\SimpleMA22333.mq4;127:19;'sy' - variable not definedAqui está uma torta, ou como estava dizendo pfc Gotsman pintura a óleo. ajude o boneco a sair.... não sabe nada.......
o próprio código (ou seja, apenas o início)
Eu escrevi especificamente no meu posto. Que esta função éCloseLastPosByTake() - deve ser colocada no final do código, ANTES da FUNÇÃO DE INÍCIO!
E onde você o colocou?
E tenha cuidado com os parênteses encaracolados nas condições de compra e venda. É claro que estão faltando lá (verifique - que o número de parênteses abertos é igual ao número de parênteses fechados). Aqui foi corrigida a venda :
Bom dia!!!
Eu preciso de ajuda! Peço desculpas por não ter sido modesto.
Mas aqui está meu problema, tenho um EA que é baseado em um Martin, ele coloca a primeira encomenda VENDA ou COMPRA, o que eu quiser, mas eu quero poder escolher COMPRAR ou VENDER em propriedades EA. Isto é, eu coloco, por exemplo, COMPRAR em suas propriedades e abre um pedido de COMPRA apenas, ou o contrário.
Receio ainda não ter aprendido a programar na MQL4 .
Estou anexando o próprio conselheiro.
Agradecemos antecipadamente àqueles que responderão!
Eu escrevi especificamente no meu posto. Que esta função éCloseLastPosByTake() - deve ser colocada no final do código, ANTES da FUNÇÃO DE INÍCIO!
E onde você o colocou?
E preste mais atenção com parênteses curvos nas condições de compra e venda. É claro que estão faltando lá (verifique - que o número de parênteses abertos é igual ao número de parênteses fechados). Aqui está a solução para a venda :
Coloquei-o depois do início fi, por isso entendo.....
Enganei-me então, obrigado pelo cutucão :-))
Se eu acertei, deve ser colocado após } no final do bloco de função de desinicialização de especialistas ??????? ou após o retorno(0); no final mesmo do start-???????
Obrigado antecipadamente por sua paciência!!!!!!!!!
Coloquei-a após a função de início, portanto entendo.....
Enganei-me, obrigado pelo cutucão :-))
Se entendi corretamente, deve ser colocado após } no final do bloco de função de desinicialização de especialistas ??????? ou após o retorno(0); no final mesmo do início-???????
Obrigado antecipadamente por sua paciência!!!!!!!!!
Deve ser colocado do lado de fora. Não dentro de qualquer função, - mas como uma função independente separada.
Assim:
Não tenho certeza de que sob estas condições, o Assessor Especialista irá trabalhar. Porque a primeira posição não poderá ser aberta.
A função éCloseLastPosByTake() deve ser removida de uma condição de Compra ou Venda.
Então o assessor trabalhará.
Bom dia!!!
Mas aqui está meu problema, tenho um EA que é baseado em um Martin, ele coloca a primeira encomenda VENDA ou COMPRA, o que eu quiser, mas eu quero poder escolher COMPRAR ou VENDER em propriedades EA. Isto é, eu coloco por exemplo COMPRAR em suas propriedades e abre um pedido de COMPRA apenas, ou vice versa.
Estou anexando a própria EA.
Agradecemos antecipadamente a todos que responderem!
É improvável que alguém responda. A EA é descompilada (hackeada) e tais arquivos não são bem-vindos aqui...
WinExec("C:\\Program Files\\Opera\\opera.exe http://www.mail.ru",2);Olá a todos, isto é lançar o link com um navegador específico, mas como faço para lançar o mesmo link por padrão?Isto é, o navegador padrão
ShellExecute, o comando "aberto", por assim dizer.
Decidi estudar a MQL 4, uma vez que tudo o que encontrei não corresponde às minhas aspirações. No momento estou estudando a fim de entender como os profissionais trabalham e melhorá-lo para minha idéia. Há uma função personalizada (simples e pequena, uma página), o código é anexado. Devido ao meu amadorismo, não consigo entender por dois dias - o que esta função retorna como resultado, e qual condição aninhada é a Otra?
Alguém gostaria de plantar uma centelha de conhecimento no meu entorpecimento?
O que eu recebo é isto:
O objetivo da função é determinar se já existe um pedido feito para este par e, se existe, determinar seu tipo.
A função que chamou esta função aguarda a presença de uma das ordens selecionadas no procedimento interruptor, A função deve retornar "1", na presença de duas ordens - "2", e na ausência de ordens "-1".
O ciclo é iniciado se l_pos_16= 0. Vamos assumir que temos quatro pedidos pendentes no total para alguns pares, incluindo dois no par onde a EA está trabalhando e eles não são os primeiros.
Entretanto, na primeira iteração do laço, a função if(OrderSelect(l_pos_16, SELECT_BY_POS, MODE_TRADES)) Verifique a posição com o número "0" na lista de ordens, mas não existe tal posição (porque entendo que a numeração começa a partir da posição 1) e depois passará para a próxima. senão com saída completa de fCountOrders(int &a_count_0, int &a_count_4, int &a_count_8, int &a_count_12) com retorno do valor Retorno(-1).
Para meu entendimento, o sentido da função como um todo se perde, uma vez que o resultado deve ser o mesmo, quer haja ou não qualquer ordem para o par .
Entretanto, quando a EA funciona, esta função define e dá a você o que a chamada função espera dela, que então funciona de acordo com o resultado obtido .
Eu também não entendo o que senão Retorno(-1) trabalhará em
se (OrderSelect(l_pos_16, SELECT_BY_POS, MODE_TRADES)) {
Ou mesmo em if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic_N) {
O código da função :
int fCountOrders(int &a_count_0, int &a_count_4, int &a_count_8, int &a_count_12)
a_count_0= 0;
a_count_4 = 0;
a_count_8 = 0;
a_count_12 = 0;
gi_252 = 0;
para (int l_pos_16 = 0; l_pos_16 < OrderTotal(); l_pos_16++) {
se (OrderSelect(l_pos_16, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic_N) {
switch (OrderType()) caso OP_BUY:
a_count_0+++;
gi_252 = 1;
g_ticket_268 = OrderTicket();
gs_272 = OrderComment();
g_ord_open_open_price_256 = OrderOpenPrice();
g_ord_stoploss_288 = OrderStopLoss();
g_ord_takeprofit_296 = OrderTakeProfit();
pausa;
caso OP_SELL:
a_count_4++;
gi_252 = -1;
g_ticket_268 = OrderTicket();
gs_272 = OrderComment();
g_ord_open_open_price_256 = OrderOpenPrice();
g_ord_stoploss_288 = OrderStopLoss();
g_ord_takeprofit_296 = OrderTakeProfit();
pausa;
caso OP_BUYSTOP:
a_count_8++;
pausa;
caso OP_SELLSTOP:
a_count_12++;
}
}
} caso contrário, retornar (-1);
}
retorno (a_count_0 + a_count_4 + a_count_8 + a_count_12);
/* execução normal do f-i retornará um na variável em um dos caso e "0" em todos os outros, o que indica que há um de
dos tipos de pedido, e o número deste pedido está disponível para a função de chamada,
comentar, abrir preço, parar perdas e ter lucro */
}