[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 404

 
Dimka-novitsek:
Não consigo organizar um loop, X e Y são sempre iguais a 0.

Primeiro, elimine o lixo que está em sua mente.

Faça seu código bonito e estruturado.

E não seja ganancioso por comentários.

 

Sim, é claro.

Eu primeiro seleciono as ordens com o número mágico requerido e nesse par de moedas. if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()) {

Então o loop for( i=OrdersTotal();i==0;i--) no qual eu seleciono as ordens como esta OrderSelect(i,SELECT_BY_POS ); e então conto quantas ordens como OP_SELLSTOP

Se não houver ordens, então abrimos uma ordem do tipo de ordem que não existe. A variável X no laço superior e a variável Y no laço inferior são usadas para contar as ordens do tipo necessário. Os dois laços são os mesmos em estrutura e propósito.

Já escrevi com explicações, mas aqui o pai veio, ligou, trouxe leite, chá e halva, e eu não enviei uma mensagem, fui fazer xixi, e meu pai apagou a mensagem não enviada, disse, mas o quê, você poderia escrever em outra janela do mecanismo de busca? Eu estava me perguntando o que é pasta de urtiga. Fiquei um pouco assustado e enviei sem quase nenhuma explicação.

Bem, X e Y são sempre 0. O for loop não deve estar funcionando. Em resumo, não entendo o que pode não funcionar lá, por causa disso, as ordens abrem 2 em cada carrapato.


 
Dimka-novitsek:

Sim, é claro.

Eu primeiro seleciono as ordens com o número mágico requerido e nesse par de moedas. if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()) {

Então o loop for( i=OrdersTotal();i==0;i--) no qual eu seleciono as ordens como esta OrderSelect(i,SELECT_BY_POS ); e então conto quantas ordens como OP_SELLSTOP

Se não houver ordens, então abrimos uma ordem do tipo de ordem que não existe. A variável X no laço superior e a variável Y no laço inferior são usadas para contar as ordens do tipo necessário. Os dois laços são os mesmos em estrutura e propósito.

Já escrevi com explicações, mas aqui o pai veio, ligou, trouxe leite, chá e halva, e eu não enviei uma mensagem, fui fazer xixi, e meu pai apagou a mensagem não enviada, disse, mas o quê, você poderia escrever em outra janela do mecanismo de busca? Eu estava me perguntando o que é pasta de urtiga. Fiquei um pouco assustado e enviei sem quase nenhuma explicação.

Bem, X e Y são sempre 0. O for loop não deve estar funcionando. Em resumo, não entendo de forma alguma o que poderia não estar funcionando lá, está fazendo com que as ordens abram 2 em cada carrapato.


É exatamente isso, o para loops não faz o que você precisa.

Você tem o seguinte: for( i=OrdensTotal();i==0;i--)

1) Se houver 0 ordens, o laço será executado 1 vez. Neste caso, ele selecionará o desconhecido e fará o desconhecido com ele =)

2) Se houver mais de 0 pedidos, o laço não iniciará de forma alguma, pois a condição "i==0" não é atendida

 
Obrigado!!! Vou reler a referência em um instante!
 
Sim! Obrigado!!!
 
Se você sabe, eu não consigo acertar, tudo é igual.
//+------------------------------------------------------------------+
//|                                                    для лавин.mq4 |
//|                      Copyright © 2011, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
extern double stoploss=0; extern double takeprofit=20;extern int otstup=20; extern datetime expiration=0;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
 int tiket,tikett;double volume=0.1;int i=0,R1=0,R2=0,A=1 ;double price=PRICE_OPEN;
   //  R1=((PRICE_OPEN- stoploss*Point)*stoploss)/stoploss;R2=((PRICE_OPEN+ stoploss*Point)*stoploss)/stoploss;
     
     
int start()
  {       int X,Y; double price=(Ask+Bid)/2;            
//----
       Alert ("OrdersTotal()",OrdersTotal());

if(OrderSymbol()==Symbol()&&OrderMagicNumber( )==1000){
 for(int i=OrdersTotal();i>0;i--){Alert ("i", i);
OrderSelect(i,SELECT_BY_POS );if(OrderType( )==OP_BUYSTOP){X++;}}}Alert ("X", X);
if (X==0){


   tiket= OrderSend( Symbol(), OP_BUYSTOP,  volume*A, price +otstup*Point, Point* 3, R1, price+takeprofit*Point+otstup*Point, "OP_BUYSTOP", 1000,  expiration, Red); 
   Alert ("OP_BUYSTOP", GetLastError( )); }
   
if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()) { 
 for ( i=OrdersTotal();i>0;i--){Alert ("i", i); OrderSelect(i,SELECT_BY_POS );
if(OrderType( ) ==OP_SELLSTOP) { Y++;}}}Alert ("Y", Y);
 if (Y==0){ 
   tikett= OrderSend( Symbol(), OP_SELLSTOP,  volume*A, price -otstup*Point, Point* 3,R2, price-takeprofit*Point-otstup*Point, "OP_SELLSTOP" , 2000,  expiration,C'0,128,255' );
    Alert ("OP_SELLSTOP", GetLastError( )); 
    }       
   
//----
   return(0);
  }
//+-------------------------------------------
Em sua ajuda, diz

Expression2 é uma verificação da condição final do laço. Se for verdade, então o para operador de corpo de loop é executado.

etc. Eu consertei tudo e nada mudou...também tentei colocar i=5 em vez de i=OrdensTotal(), nada mudou, o laço não funciona.
 
Dimka-novitsek:
O texto de ajuda diz

Expression2 é uma verificação da condição final do laço. Se for verdade, o para operador de corpo de loop é executado.

etc. Eu consertei tudo e nada mudou...também tentei colocar i=5 em vez de i=OrdensTotal(), nada mudou, o laço não funciona.

Certo, o laço não chega ao laço.

if(OrderSymbol()==Symbol()&&OrderMagicNumber( )==1000){
 for(int i=OrdersTotal();i>0;i--){Alert ("i", i);

Você escreveu: "Se o símbolo da ordem (qual ordem? há muitas... ou nenhuma) for igual à ordem atual e sua magia (qual ordem?) for igual a 1000, então execute o laço".

e você tem que: "iniciar um loop. Nele: 1) selecione uma ordem. 2) e se símbolo =... e magia =1000, então X++";"

 

Alguns CDs em contas reais atribuem todos os tipos de prefixos como "." ou "FXF" aos nomes dos símbolos.

Como posso usar estes prefixos?

Eu o fiz desta maneira:

#define DEF_SPEC "FXF

string SymbolsTrade[] = {"AUDCAD "DEF_SPEC ... -não funciona

string SymbolsTrade[] = {"AUDCAD "+DEF_SPEC ... - também não funciona assim

como resultado, recebo apenas FXF ao invés de AUDCADFXF.

Você pode me dizer como implementar isto?
 
pusheax:

Alguns CDs em contas reais atribuem todos os tipos de prefixos como "." ou "FXF" aos nomes dos símbolos.

Como posso usar estes prefixos?

Eu fiz isso:

#define DEF_SPEC "FXF

string SymbolsTrade[] = {"AUDCAD "DEF_SPEC ... -não funciona

string SymbolsTrade[] = {"AUDCAD "+DEF_SPEC ... - também não funciona assim

como resultado, recebo apenas FXF ao invés de AUDCADFXF.

Você pode me dizer como implementar isto?

Bem, é assim que funciona na mosca:

#define DEF_SPEC "FXF"
string SymbolsTrade[] = {"AUDCAD", "EURUSD"};

int init()
{
   for (int i = 0; i < ArraySize(SymbolsTrade); i++)
      SymbolsTrade[i] = SymbolsTrade[i] + DEF_SPEC;
 

Entendi, eu faço isso...

Além disso, a condição não funciona.

OrderSelect(i,SELECT_BY_POS );
if(OrderType( ) ==OP_SELLSTOP) { Y++;}Alert ("Y", Y);}