precisam de um nome diferente
ObjectCreate("tomato " + high_nr,OBJ_TREND,0,Time[high_nr],high_price,Time[0],high_price); ObjectSet("tomato " + high_nr,OBJPROP_COLOR,Tomato);
depois de
ObjectCreate("olive"+low_nr,OBJ_TREND,0,Time[low_nr],low_price,Time[0],low_price); ObjectSet("olive"+low_nr,OBJPROP_COLOR,Olive);
o código coloca 25 linhas, no mesmo preço, mas começando não a partir da vela low_nr (que é sempre 10, não importa qual é o número real após a estocagem <25), mas a partir da vela 35.
o mesmo para o tomate.
:(
Uma vez criado um objeto, não se pode criar outro objeto com o mesmo nome.
É por isso que ele funciona bem pela primeira vez, mas não depois disso (em seu código original).
Se você quiser ter apenas a última linha que atende aos critérios mostrados em seu gráfico, crie a linha no init e depois use ObjectMove para mover o objeto para suas novas coordenadas.
Se você quiser que todas as linhas passadas sejam mostradas,
ObjectCreate("tomato " + high_nr,OBJ_TREND,0,Time[high_nr],high_price,Time[0],high_price);
Como o high_nr é o bar shift, ele provavelmente será replicado em um momento posterior, portanto, não funcionará corretamente. Use a data/hora no nome e então ela será única
Olá
Eu tentei escrever em código isto:
quando K% linha de estocástico(80,30,30) > 75, olhe para trás 36 barras (34,turno 2) e desenhe uma linha H_line "tomate" da maior altura para a barra atual.
quando K% linha de estocástico(80,30,30) < 25, olhe para trás 36 barras (34,turno 2) e desenhe uma linha H_line "oliveira" da barra mais baixa baixa para a barra atual.
quando eu executar isto eu recebo a primeira configuração para o tomate e para a azeitona ok, então mesmo se no diário eu recebo "tomate ON" diferente preço lvl, eu não recebo nova linha de tomate no gráfico. o mesmo para a azeitona.
a idéia da ea é usar esta linha para abrir negócios. então o que eu finalmente vou querer é ter isto:
quando K%>75
linha de traço o mais alto(depois de 36 barras).
se linha ON, não desenhar mais linhas, até que a linha seja apagada.
se um comércio estiver aberto, apagar a linha
se nenhum comércio estiver aberto e 24 barras passadas da barra que determinou k%>75 também apagar a linha
:)
como é meu primeiro código que escrevi em minha vida de buraco, as pls me ensinam a olhar para o problema.
Obrigado.
Começamos no início .....
double stoch=iStochastic(NULL,0,Kperiod,Dperiod,Stochshift,MODE_SMA,1,MODE_MAIN,0);
No bar 0 stoch pode chegar a algum lugar com valor de bar 0 > 75 e terminar com valor mais baixo
Tem de traçar uma linha nesse caso ?? ou é apenas para fins estocásticos de preço fechado ??
double high_price,low_price; int high_nr,low_nr; high_nr=iHighest(NULL,0,MODE_HIGH,34,2); high_price=High[high_nr]; low_nr=iLowest(NULL,0,MODE_LOW,34,2); low_price=Low[low_nr];
alguma vez usado iHighest e/ou iLowest ??? Veja como fazer o iHighest e o iLowest
if(stoch > 75) high_price = High[iHighest(NULL,0,MODE_HIGH,......
if(stoch < 25) low_price = Low[iLowest(........
//-----
for(high_nr=2;high_nr<36;high_nr++) // why do you repeat this ?? { if(Bid<high_price && stoch>75) { ObjectCreate("tomato",OBJ_TREND,0,Time[high_nr],high_price,Time[0],high_price); ObjectSet("tomato",OBJPROP_COLOR,Tomato); Print ("tomato ON"+high_price); } }
criar uma vez é suficiente .... o laço só faz repetir o que está dentro { }
portanto, não é necessário um loop para isso ....
então antes de você criar
- verificação de operações em andamento
- verificar se já existe um objeto com nome começando por "tomate" e se ele existe, então verifique se você tem que apagar o antigo
criar um momento de nome que você faça
linenamehigh = "tomato "+ TimeToStr(Time[0],TIME_DATE|TIME_MINUTES)
verificando sua lata de objetos com
//---- int i, ot=ObjectsTotal()-1; string id; //---- for(i=ot;i>=0;i--) {id=ObjectName(i); if(StringSubstr(id,0,7)=="tomato ") { //check when created if(StringSubstr(id,8,...)< TimeToStr(Time[24],........)){ObjectDelete(id);} } if(StringSubstr(id,0,6)=="olive ") { //..... } }
Klick nos links e tente entender o que acontece
lugares com ....... dentro do código que você pode tentar preencher você mesmo
vocêpode especificar o que você está tentando realizar ?
a idéia final:
Sinal 1 = quando K%>75 e alta de barra[1] e barra atual[0] menor que a maior alta dos últimos 36 bar(ponto_alto)
traçar linha de tomate em High_point
se a linha do tomate já estiver traçada, não desenhar mais linhas, até que a linha seja apagada.
se um comércio estiver aberto usando a linha de tomate, delete a linha
se nenhum comércio estiver aberto e 96 barras passadas da barra que determinou o ponto_alto apagar a linha.
agora, eu recebo apenas uma linha em cada Sinal 1(função de impressão envia 36 "tomate ON" cada tick válido, acho eu), então eu tenho que dizer ao código para parar o loop depois que ele encontrar a linha do tomate. eu vou cozinhar um pouco de esparguete e pensar como eu deveria escrever isso... na minha cabeça este deveria ser o próximo passo.... espero não estar perdendo algo :)
estou no caminho certo? muito obrigado por sua ajuda e conselhos.
o código até agora:
//+------------------------------------------------------------------+ //| 1expert.mq4 | //| ant | //| | //+------------------------------------------------------------------+ #property copyright "ant" #property link "" #property indicator_chart_window extern int Kperiod = 80; extern int Dperiod = 30; extern int Stochshift = 30; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { double stoch; stoch=iStochastic(NULL,0,Kperiod,Dperiod,Stochshift,MODE_SMA,1,MODE_MAIN,0); double high_price,low_price; int high_nr,low_nr; high_nr=iHighest(NULL,0,MODE_HIGH,34,2); high_price=High[high_nr]; low_nr=iLowest(NULL,0,MODE_LOW,34,2); low_price=Low[low_nr]; datetime H=Time[high_nr]; datetime L=Time[low_nr]; ///////////////////////////////////////////////////////////////////////////////// for(high_nr=2;high_nr<36;high_nr++) { if(Bid<high_price && High[0]<high_price && High[1]<high_price && stoch>75) { ObjectCreate("tomato"+H,OBJ_TREND,0,H,high_price,Time[0],high_price); ObjectSet("tomato"+H,OBJPROP_COLOR,Tomato); Print ("tomato ON"+H); } } /////////////////////////////////////////////////////////////////////////////// for(low_nr=2;low_nr<36;low_nr++) { if(Bid>low_price && Low[0]>low_price && Low[1]>low_price && stoch<25) { ObjectCreate("olive"+L,OBJ_TREND,0,L,low_price,Time[0],low_price); ObjectSet("olive"+L,OBJPROP_COLOR,Olive); Print ("olive ON"+low_price); } } //---- //---- return(0); }
double high_price,low_price; int high_nr,low_nr; high_nr=iHighest(NULL,0,MODE_HIGH,34,2); high_price=High[high_nr]; low_nr=iLowest(NULL,0,MODE_LOW,34,2); low_price=Low[low_nr]; datetime H=Time[high_nr]; datetime L=Time[low_nr]; if (stoch > 75 && High[1] < High[high_nr] && High[0] < High[high_nr]) { ObjectCreate("tomato"+H,OBJ_TREND,0,Time[H],high_price,Time[0],High[0]); ObjectSet("tomato"+H,OBJPROP_COLOR,Tomato); Print ("tomato ON"+H); }
B.T.W. não precisa de uma linha para fazer isso
O caso de você estar falando de cichichan raramente vai acontecer, então você tem que usar um índice para que você possa ver o que você faz :
http://charts.mql5.com/3/799/eurusd-h1-fxpro-financial-services.png
A seta_para baixo não aparece, há um bug em alguns lugares onde ....
//+------------------------------------------------------------------+ //| lexpert.mq4 | //| | //+------------------------------------------------------------------+ #property copyright "ant" #property link "" #property indicator_chart_window #property indicator_buffers 8 #property indicator_color1 YellowGreen #property indicator_color2 Coral extern int Kperiod = 80; extern int Dperiod = 30; extern int Stochshift = 30; double arrow_up[]; double arrow_down[]; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- //-------- SetIndexBuffer(0, arrow_up ); SetIndexStyle(0, DRAW_ARROW, STYLE_SOLID,2); SetIndexArrow(0,233); SetIndexEmptyValue(0,0.0); //-------- SetIndexBuffer(1,arrow_down); SetIndexStyle(1, DRAW_ARROW, STYLE_SOLID,2); SetIndexArrow(1,234 ); SetIndexEmptyValue(1,0.0); //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { int limit; int counted_bars=IndicatorCounted(); //---- last counted bar will be recounted if(counted_bars>0) counted_bars--; limit=Bars-counted_bars; //---- macd counted in the 1-st additional buffer for(int i=limit; i>=0; i--) { double stoch_1, stoch_2; stoch_2=iStochastic(NULL,0,Kperiod,Dperiod,Stochshift,MODE_SMA,1,MODE_MAIN,i+2); stoch_1=iStochastic(NULL,0,Kperiod,Dperiod,Stochshift,MODE_SMA,1,MODE_MAIN,i+1); double high_price,low_price; int high_nr,low_nr; high_nr=iHighest(NULL,0,MODE_HIGH,34,i+2); high_price=High[high_nr]; low_nr=iLowest(NULL,0,MODE_LOW,34,i+2); low_price=Low[low_nr]; datetime H=Time[high_nr]; datetime L=Time[low_nr]; ///////////////////////////////////////////////////////////////////////////////// if(Bid<high_price && High[i]<high_price && High[i+1]<high_price && stoch_2<75 && stoch_1 >75) { arrow_down[i] = High[i] + 5*iATR(NULL,0,200,i); ObjectCreate("tomato"+H,OBJ_TREND,0,H,high_price,Time[i],high_price); ObjectSet("tomato"+H,OBJPROP_RAY_RIGHT, false); ObjectSet("tomato"+H,OBJPROP_WIDTH,5 ); ObjectSet("tomato"+H,OBJPROP_COLOR,Tomato); Print ("tomato ON"+H); } else arrow_down[i] = 0.0; /////////////////////////////////////////////////////////////////////////////// if(Bid>low_price && Low[i]>low_price && Low[i+1]>low_price && stoch_2>25 && stoch_1 < 25) { arrow_up[i] = Low[i] - 5*iATR(NULL,0,200,i); ObjectCreate("olive"+L,OBJ_TREND,0,L,low_price,Time[i],low_price); ObjectSet("olive"+L,OBJPROP_COLOR, Yellow ); ObjectSet("olive"+L,OBJPROP_WIDTH,5 ); ObjectSet("olive"+L,OBJPROP_RAY_RIGHT, false); Print ("olive ON"+low_price); } else arrow_up[i] = 0.0; //---- } //---- return(0); }
![MQL5 - Linguagem para estratégias de negociação inseridas no terminal do cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Olá
Eu tentei escrever em código isto:
quando K% linha de estocástico(80,30,30) > 75, olhe para trás 36 barras (34,turno 2) e desenhe uma linha H_line "tomate" da maior altura para a barra atual.
quando K% linha de estocástico(80,30,30) < 25, olhe para trás 36 barras (34,turno 2) e desenhe uma linha H_line "oliveira" da barra mais baixa baixa para a barra atual.
quando eu executar isto eu recebo a primeira configuração para o tomate e para a azeitona ok, então mesmo se no diário eu recebo "tomate ON" diferente preço lvl, eu não recebo nova linha de tomate no gráfico. o mesmo para a azeitona.
a idéia da ea é usar esta linha para abrir negócios. então o que eu finalmente vou querer é ter isto:
quando K%>75
linha de traço o mais alto(depois de 36 barras).
se linha ON, não desenhar mais linhas, até que a linha seja apagada.
se um comércio estiver aberto, apagar a linha
se nenhum comércio estiver aberto e 24 barras passadas da barra que determinou k%>75 também apagar a linha
:)
como é meu primeiro código que escrevi em minha vida de buraco, as pls me ensinam a olhar para o problema.
Obrigado.