[¡AVISO CERRADO!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen. No puedo ir a ningún sitio sin ti. - página 492

 

Ayúdame a añadir, el desplazamiento horizontal
y el desplazamiento vertical
Si también funciona..........cloud

//+------------------------------------------------------------------+
//|                                                Price Channel.mq4 |
//+------------------------------------------------------------------+



#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Red
#property indicator_color2 Blue
#property indicator_color3 DodgerBlue
//---- input parameters
extern int ChannelPeriod = 14;
//---- buffers
double UpBuffer[];
double DnBuffer[];
double MdBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   string short_name;
//---- indicator line
   SetIndexStyle(0, DRAW_LINE);
   SetIndexStyle(1, DRAW_LINE);
   SetIndexStyle(2, DRAW_LINE);
   SetIndexBuffer(0, UpBuffer);
   SetIndexBuffer(1, DnBuffer);
   SetIndexBuffer(2, MdBuffer);
//---- name for DataWindow and indicator subwindow label
   short_name="Price Channel("+ChannelPeriod+")";
   IndicatorShortName(short_name);
   SetIndexLabel(0, "UpCh");
   SetIndexLabel(1, "DownCh");
   SetIndexLabel(2, "MidCh");
//----
   SetIndexDrawBegin(0, ChannelPeriod);
   SetIndexDrawBegin(1, ChannelPeriod);
   SetIndexDrawBegin(2, ChannelPeriod);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Price Channel                                                         |
//+------------------------------------------------------------------+
int start()
  {
   int i, counted_bars = IndicatorCounted();
   int    k;
   double high, low, price;
//----
   if(Bars <= ChannelPeriod) 
       return(0);
//---- initial zero
   if(counted_bars < 1)
      for(i = 1;i <= ChannelPeriod; i++) 
          UpBuffer[Bars-i] = 0.0;
//----
   i = Bars - ChannelPeriod - 1;
   if(counted_bars >= ChannelPeriod) 
       i = Bars - counted_bars - 1;
   while(i >= 0)
     {
       high = High[i]; 
       low = Low[i]; 
       k = i - 1 + ChannelPeriod;
       while(k >= i)
         {
           price = High[k];
           if(high < price) 
               high = price;
           price = Low[k];
           if(low > price)  
               low = price;
           k--;
         } 
       UpBuffer[i] = high;
       DnBuffer[i] = low;
       MdBuffer[i] = (high + low) / 2;
       i--;
     }
   return(0);
  }
//+------------------------------------------------------------------+
 
splxgf >>:

Можно сделать горячий старт сразу в

init(){

while (true) {

//Вечный кайф

}

Gracias splxgf. Lo intenté, pero... Bueno, supongo que tendré que dejar esta aventura hasta tiempos mejores. O quizás alguien más muestre interés en este, en mi opinión, útil perfeccionamiento de muchos expertos.

 
hedger писал(а) >>

Gracias splxgf. Lo intenté, pero... Bueno, supongo que tendré que dejar esta aventura hasta tiempos mejores. Y quizás alguien más se interese por este, en mi opinión, útil perfeccionamiento de muchos expertos.


ver cómo se debe hacer
int inicio()
{
while(true)
{
Sleep(5000); // 5 segundos de retraso hasta la siguiente iteración
RefreshRates(); // Actualizar datos
// resto del código. Condiciones para abrir, cerrar, etc.
}
}
 
Djonon >>:

ПОмогите добавить, Сдвиг по горозинтали
и вертикали
Если ещё и работать бутет..........клювоо

extern int Сдвиг_по_горозинтали = 14; //КОЛ-ВО БАРОВ
extern int и_вертикали = 14; //КОЛ-ВО ПУНКТОВ
Archivos adjuntos:
 
hedger >>:

Для закрытия ордеров я пользуюсь советником JimsCloseOrders, который может закрывать любые ордера по выбору – или профитные, или убыточные, или все подряд, правда пришлось его немного подкорректировать - вот в этих двух строках кода

extern bool CloseOpenOrders = true;

extern bool CloseOrdersWithPlusProfit = false;

false и true надо поменять местами, иначе, если такую настройку выполнять при установке на график, почему-то начинает закрывать все ордера (видимо из-за последовательности выполнения команд программой, но не уверен, не спец).

У меня вопрос к профи.

Требуется, как можно быстрее запустить, например, советника, о котором шла речь выше, но все советники и скрипты начинают действовать с момента поступления первого тика на график. Если же выбранная для установки советника валютная пара оказалась не очень "активной" в этот момент, то потери могут быть значительными.

Существует ли возможность создания "общего" графика для всех валют, или воспользоваться поступающим тикам любой другой пары? Тики же в терминал поступают почти непрерывно. Где их можно перехватить?

Es simple en

int init()
  {
    трали вали..
    start();
  }
Al inicializar, ejecuta inmediatamente la función
start();
Véase también la emulación de garrapatas, pero eso no es todo...

start() es la función principal. En los Asesores Expertos se llama después del siguiente tick. En el caso de los indicadores personalizados, se llama durante el recálculo después de adjuntar el indicador al gráfico, al abrir el terminal del cliente (si el indicador está adjunto al gráfico), así como después de la llegada del siguiente tick. En los scripts se ejecuta inmediatamente después de adjuntar al gráfico y de la inicialización. Si no hay una función start() en el módulo, este módulo (Asesor Experto, script o indicador personalizado) no puede ser lanzado.
 
int inicio()
{
double bid =MarketInfo("GBPUSD",MODE_BID);
double ask =MarketInfo("GBPUSD",MODE_ASK);
double point =MarketInfo("GBPUSD",MODE_POINT);
OrderSend("GBPUSD",OP_BUY,0.01,ask,2,bid-15*Point,bid+15*Point);
volver;
}

Tomé este script del tutorial; quería ver cómo funcionaba; lo compilé y lo guardé. Cuando lo ejecuto, falla, ¿por qué?
No me da ningún error, simplemente no funciona...
 
Caballeros. Buenas noches a todos. No estoy teniendo ninguna suerte en el dominio del idioma. (((((((
Intento reescribir algo a partir de montones de Asesores Expertos, pero cuando tengo que escribir algo concreto, me siento tonto...(((
Y ahora...
Me gustaría hacer la siguiente línea en el Asesor Experto:
Tengo un algoritmo de apertura, tengo beneficios, y quiero que se cierre después de un cierto tiempo, no importa cuál sea el resultado,
- así es como se añade ahora?????????
Quiero ser capaz de establecer este tiempo en Expert Advisor. Por ejemplo, quiero que el acuerdo se cierre solo después de dos, tres o cuatro horas... Dependiendo de la hora de publicación de las noticias, por ejemplo. Creo que entiendes lo que quiero decir.
Si alguien lo sabe, tal vez esas preguntas ya se han hecho en el foro, al menos que me dé el enlace. Trató de leer el libro de texto, uno sólo nervios, escrito para los programadores avanzados, bueno, ciertamente no para las damas.
Y si alguien no es difícil y parece una nimiedad, entonces escribe las líneas, yo al menos las pego, entonces tal vez algo funcione.
Una gran mujer por favor.......
 
Magiyanka >>:
Господа. Всем добрый вечер. У меня прям совсем ничего не получается в освоении языка. (((((((

extern int Час=2; //В начало кода
extern int Мин=6;
extern int Slippage  =  25;
extern int STUPID= 12830454;
//В конец кода отдельной функцией
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
void  OrdersCloseByTime(int MagicNumber)
{
   for(int i = 0; i < OrdersTotal(); i++)
   {
      // already closed
      if(OrderSelect(i, SELECT_BY_POS,MODE_TRADES ) == false) continue;
      // not current symbol
      if(OrderSymbol() != Symbol()) continue;
      // order was opened in another way
      if(OrderMagicNumber() != MagicNumber) continue;
      if(Time[0]-OrderOpenTime( )>=Час*60*60+Мин*60){
        if(OrderType() == OP_SELL)
        OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask,Digits), Slippage, Red);
        if(OrderType() == OP_BUY)
        OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid,Digits), Slippage, Blue);
        }
   }
   
}
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
int start()
{
 OrdersCloseByTime(STUPID);//STUPID это мажик номер Вашего советчика
 трали вали ...
Posiciones de cierre, ¿dónde lo pondrías para que no se pierda?
 
Lim1 >>:

int start()
{
double bid =MarketInfo("GBPUSD",MODE_BID);
double ask =MarketInfo("GBPUSD",MODE_ASK);
double point =MarketInfo("GBPUSD",MODE_POINT);
OrderSend("GBPUSD",OP_BUY,0.01,ask,2,bid-15*Point,bid+15*Point);
Alert (GetLastError());
return;
}

Взял этот скрипт из учебника, хотел посмотреть как он работает - скомпилировал, сохранил. Запускаю - безрезультатно, почему?
Ошибок не выдает, просто не работает...

Inténtalo de esta manera.

int start()
{
double bid =MarketInfo("GBPUSD",MODE_BID);
double ask =MarketInfo("GBPUSD",MODE_ASK);
double point =MarketInfo("GBPUSD",MODE_POINT);
int tickkkkkkk=OrderSend("GBPUSD",OP_BUY,1,ask,2,bid-15*Point,bid+15*Point);
if(tickkkkkkk==-1){
 Alert ("Ошибка № "+GetLastError());
 if(GetLastError()==131)
 Alert ("Неправильный объем");
 if(GetLastError()==6)
 Alert ("Нет связи с торговым сервером");
 }
 else Alert ("Все ОК!!!");
return;
}
 
no funciona, no cierra a tiempo y ya está