[ARQUIVO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 4. - página 65

 

Rolo, obrigado pela dica, aqui está um recurso para exibir um comentário no canto inferior esquerdo do gráfico, se alguém precisar dele:

void mycomment(color c,string mytext)
{
string name="mycomment";
if(ObjectFind(name)<0) ObjectCreate(name,OBJ_LABEL,0,0,0);
ObjectSet("mycomment", OBJPROP_CORNER, 2);
ObjectSet(name,OBJPROP_XDISTANCE,5);
ObjectSet(name,OBJPROP_YDISTANCE,7);
ObjectSetText(name,mytext,12,"",c);
}

 
Você pode me dizer como reabrir um arquivo em um script: abrir arquivo - olhar através - fechar arquivo, quando eu tento reabri-lo diz "fim de arquivo"...
 
Olá, você pode avisar se alguém encontrou este problema: na janela do gráfico de moedas, às vezes o próprio gráfico desaparece. Depois, ele diz refrescar e tudo é restaurado. Neste momento, às vezes os consultores especializados começam a trabalhar incorretamente (abrindo negócios sem condições). Hoje até abriu um comércio com lote máximo. Eu notei e fechei com 2,5 pontos de perda. Aqui está o código para determinar o lote. Acho que isto não deveria ser assim. Suspeito que isto se deva às duas últimas linhas. Mas como?
//========================================================================                                                                              
//определение лота
//========================================================================

double Free =AccountFreeMargin();
double One_Lot =MarketInfo(Symbol(),MODE_MARGINREQUIRED);
double Step =MarketInfo(Symbol(),MODE_LOTSTEP);
double Min_Lot =MarketInfo(Symbol(),MODE_MINLOT);
double Max_Lot =MarketInfo(Symbol(),MODE_MAXLOT);
LOT=NormalizeDouble(AccountFreeMargin()*RISK/100000,2);
if (LOT*One_Lot > Free) // Не хватает даже..
     {                                         // ..на минимальн. лот:(
         Comment("денег нет  " );  
            return(0);                           // ..и выход 
     }
     else Comment("деньга есть  " );
if(LOT<Min_Lot)
 LOT=Min_Lot;
if(LOT>Max_Lot)
 LOT=Max_Lot;
далее открытие ордера по условиям.
 
Lians:

Olá a todos!

Você pode me dizer se é possível exibir texto em um gráfico, como

saída como uma função separada para que ela possa ser chamada assim:

Olhe para esta função:

//+----------------------------------------------------------------------------+
void iPrint(bool print, string mess1, string mess2="", string mess3="", string mess4="", 
            int sz=9, color cl1=Aqua, color cl2=Aqua, color cl3=Aqua, color cl4=Aqua) {
   string   NameGrafText, message, nm;
   int      i, y, k, LenStr, shift, Win_Num=-1, num=0;
   color    cl;
   if (mess1=="") {
      Print("Func iPrint: Передана пустая строка, выходим");
      return;
      }
   Win_Num=WindowFind("Win_Inform");
   if (print || Win_Num<0) {
      message=mess1+mess2+mess3+mess4;
      Print(message); 
      return;
      }
   k=ArraySize(Mass_Name_Message)-1;
   if (StringLen(mess1)>0) num++;
   if (StringLen(mess2)>0) num++;
   if (StringLen(mess3)>0) num++;
   if (StringLen(mess4)>0) num++;
   for (i=k; i>=0; i--) {                             
      NameGrafText=Mass_Name_Message[i];           
      if (StringLen(NameGrafText)>0)
      if (ObjectFind(NameGrafText)==Win_Num) {
         if (i+num>k) {
            ObjectDelete(NameGrafText);  
            Mass_Name_Message[i]="";
            }
         else if (i+num<=k) {
            Mass_Name_Message[i+num]=Mass_Name_Message[i];
            y=ObjectGet(NameGrafText, OBJPROP_YDISTANCE);               // координата Y
            ObjectSet  (NameGrafText, OBJPROP_YDISTANCE, y+(sz+1)*num); // координата Y
            ObjectSet  (NameGrafText, OBJPROP_COLOR, LightSeaGreen);    // цвет
            }
         }
      }
   shift=num;
   int v=GetTickCount();
   for (i=0; i<num; i++) {
      shift--;
      NameGrafText=Prefix+"_Graf_Text_"+i+"_"+sy+"_"+v;
      int app=0;
      while (ObjectFind(NameGrafText)==Win_Num) {
         app++;
         NameGrafText=Prefix+"_Graf_Text_"+i+"_"+sy+"_"+v+"_"+app;
         }
      Mass_Name_Message[num-1-i]=NameGrafText;
      switch (i) {
         case 0: message=mess1; cl=cl1; break;
         case 1: message=mess2; cl=cl2; break;
         case 2: message=mess3; cl=cl3; break;
         case 3: message=mess4; cl=cl4; break;
         default:message=mess1; cl=cl1; break;
         }
      ObjectCreate (NameGrafText, OBJ_LABEL, Win_Num, 0, 0);
      ObjectSetText(NameGrafText, message, sz, "Courier New", cl);
      ObjectSet    (NameGrafText, OBJPROP_COLOR, cl);                   // цвет
      ObjectSet    (NameGrafText, OBJPROP_CORNER,    2);                // угол
      ObjectSet    (NameGrafText, OBJPROP_XDISTANCE, 150);              // координата Х
      ObjectSet    (NameGrafText, OBJPROP_YDISTANCE, 2+(sz+1)*shift);   // координата Y
      WindowRedraw();
      }
   return;
}
//+----------------------------------------------------------------------------+

Procura pela janela indicadora Win_Inform vazia no gráfico e, se ela estiver presente, exibe mensagens nele. Caso contrário, o produto sai com impressão.

Exemplo de chamada:

//-------------------------------------------------------
   message1=StringConcatenate("Тик: ",GetTickCount()," ");
   message2=StringConcatenate("Цена Bid: ", DoubleToStr(Bid,dg));
   iPrint(false, message1, message2, "", "", 9, Aqua, DarkOrange);
   b=4; c=7;
   a=b+c;
   message1=StringConcatenate("a=",a," ");
   message2=StringConcatenate("b=",b," ");
   message3=StringConcatenate("c=",c);
   iPrint(false, message1, message2, message3, "", 9, Aqua, LimeGreen, DarkOrange);
   
   message1=StringConcatenate("Время: ", TimeToStr(TimeCurrent())," ");
   message2=StringConcatenate("Тик: ",GetTickCount()," ");
   message3=StringConcatenate("Время бара: ",TimeToStr(Time[0])," ");
   message4=StringConcatenate("Цена Bid: ", DoubleToStr(Bid,dg));
   iPrint(false, message1, message2, message3, message4, 9, Aqua, Aqua, Aqua, DarkOrange);
//-------------------------------------------------------

Utiliza a cadeia de caracteres Mass_Name_Message[10] declarada a nível global. Esta é uma matriz para armazenamento de nomes de objetos. Você pode mudar seu tamanho para atender às suas necessidades. O Prefixo variável armazena nomes de especialistas para permitir que eles identifiquem seus próprios objetos para o correto manuseio de objetos gráficos. Também é declarada globalmente e tem o tipo de corda. É provável que você consiga descobrir...

Turquia em um trailer

Arquivos anexados:
 

Confrontado com um pequeno problema com minha função:

void mycomment(color c,string mytext)
{
string name="mycomment";
if(ObjectFind(name)<0) ObjectCreate(name,OBJ_LABEL,0,0,0);
ObjectSet("mycomment", OBJPROP_CORNER, 2);
ObjectSet(name,OBJPROP_XDISTANCE,5);
ObjectSet(name,OBJPROP_YDISTANCE,7);
ObjectSetText(name,mytext,12,"",c);
}

Ele apara uma longa mensagem, por exemplo, se você tentar comentar na linha "Verifique suas configurações EA, para abrir a janela de configurações pressione F7".

apenas deixa isto: "Verifique suas configurações EA para abrir a janela de configurações" e então ela é cortada, embora o texto não esteja nem na metade da janela.

Você pode me dizer se há alguma maneira de remover esta restrição?

 

Não, comprimento máximo da linha no rótulo = 62 caracteres.

Formate o texto em várias linhas (rótulos), ou use Comentário() - há 255 caracteres

 
Boa tarde!
Encontrei um problema ao abrir um certo número(definido pelo usuário) de pedidos.
Eu escrevi um pequeno código para resolver este problema.
Mas há momentos em que um número arbitrário de ordens é aberto, geralmente perto do final do teste.

Abaixo está o próprio código.

extern string Kolichestvo_orderov = "Количество единовременно открытых ордеров";
extern int OrederBuy = 1;
extern int OrederSell = 1;


int OrdS=1,OrdB=1,ticketBuy,ticketSell,lastticketSell=0,lastticketBuy=0;

//========================================================================================================//     
                                  //---- Открытие ордеров SELL ----//
//========================================================================================================//

if(OrdS<=OrederSell)
  { //----- start
 
if(trendDn==true && SthFast>88.2 && SthSlow<38.2)
     {
ticketSell=OrderSend(Symbol(),OP_SELL,0.1,Bid,3,0,0,0,magick,0,Blue);OrdS++; //--- Если ордер открыт параметр OrdS увеличиваю 
     }
   } //-----end
          
//========================================================================================================//  
                                   //----Открытие ордеров BUY ----//
//========================================================================================================//  

if(OrdB<=OrederBuy)
  { //-----start

if(trendUp==true && SthFast<11.8 && SthSlow>61.8)
      {
ticketBuy=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,0,0,0,magick,0,Red);OrdB++; //--- Если ордер открыт параметр OrdB увеличиваю
      }

  } //------end
  

//------------------------------- Подсчет количества ордеров BUY & SELL ----------------------------------//
   
  if(ticketBuy<=OrdersHistoryTotal()) //------ проверка тикетов тех  ордеров которые уже закрыты
   {
  for(int ordBuy=lastticketBuy;ordBuy<=OrdersHistoryTotal();ordBuy++) //--- перебор новых закрытых ордеров
    {
     if(OrderSelect(ordBuy,SELECT_BY_POS,MODE_HISTORY)==true){if(OrderType()==OP_BUY)OrdB--;lastticketBuy=ticketBuy;} //--- если добавился новый закрытый ордер бай, то параметр OrdB уменьшаю
    }
   }
  
  //-----
    
 if(ticketSell<=OrdersHistoryTotal()) //------ проверка тикетов тех  ордеров которые уже закрыты
  {
 for(int ordSell=lastticketSell;ordSell<=OrdersHistoryTotal();ordSell++) //--- перебор новых закрытых ордеров
     {
     if(OrderSelect(ordSell,SELECT_BY_POS,MODE_HISTORY)==true){if(OrderType()==OP_SELL)OrdS--;lastticketSell=ticketSell;} //--- если добавился новый закрытый ордер селл, то параметр OrdS уменьшаю

Se você tem uma solução mais simples, eu ficaria feliz em receber comentários.

 
Lians:

Confrontado com um pequeno problema com minha função:

void mycomment(color c,string mytext)
{
string name="mycomment";
if(ObjectFind(name)<0) ObjectCreate(name,OBJ_LABEL,0,0,0);
ObjectSet("mycomment", OBJPROP_CORNER, 2);
ObjectSet(name,OBJPROP_XDISTANCE,5);
ObjectSet(name,OBJPROP_YDISTANCE,7);
ObjectSetText(name,mytext,12,"",c);
}

Ele apara uma longa mensagem, por exemplo, se você tentar comentar na linha "Verifique suas configurações EA, para abrir a janela de configurações pressione F7".

apenas deixa isto: "Verifique suas configurações EA para abrir a janela de configurações" e então ela é cortada, embora o texto não esteja nem na metade da janela.

Você pode me dizer se há alguma maneira de remover esta restrição?

Tente minha função. Está acima de seu post nesta página. Dividir uma corda em várias cordas para que cada corda não tenha mais de 64 caracteres. Minha função produz estas linhas divididas uma acima da outra. Em seguida, quando a próxima mensagem é exibida, ela grava as antigas acima, e exibe a nova mensagem na cor que você definiu quando chamou minha função.
 
Eu baixei o histórico e acidentalmente descobri que tenho um buraco em USDJPY de 2012.01.16 a 2012.03.20. Quando tentei fazer o download novamente, o terminal respondeu que eu tenho toda a história.
Como posso preencher esta lacuna?
Como posso fazer o upload do histórico sem nenhum buraco?
E há alguma maneira de verificar se existe um buraco na história?
 
artmedia70:
Tente minha função. Está acima de seu post nesta página. Dividir uma corda em várias cordas para que cada corda não tenha mais de 64 caracteres. Minha função produz estas linhas divididas uma acima da outra. Em seguida, quando a próxima mensagem é exibida, ela grava as antigas acima, e exibe a nova mensagem na cor que você definiu quando chamou minha função.
Obrigado, mas é um pouco complicado para mim, e sua função emite 4 mensagens de uma só vez, enquanto eu preciso de uma. Acontece que não mais do que 64 caracteres em uma linha?
Razão: