Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 535

 
Leo59:
Por favor, explique cómo desempaquetar los datos de la tabla (*.csv) en un array estático tridimensional.
La primera columna de la tabla contiene el índice de la primera dimensión de la matriz,
. La segunda columna contiene el índice de la segunda dimensión de la matriz,
. La tercera y siguientes columnas contienen los valores propios de la tercera dimensión de la matriz.

Olvida lo que escribiste después. Declara un array de tipo apropiado a nivel de variable global arr[][][3] y define la segunda dimensión por ti mismo.

void AAA()
   {
    int       Handle;                                          // Файловый описатель
    string    File_Name = "AAA.csv";                           // Имя открываемого файла

    string    str_1 = "";                                      //  1 Номер индекса по первому измерению
    string    str_2 = "";                                      //  2 Номер индекса по второму измерению
    string    str_3 = "";                                      //  3 Значение
    string    str_4 = "";                                      //  4 Значение
    string    str_5 = "";                                      //  5 Значение

    Handle=FileOpen(File_Name, FILE_READ, ";");                // Открытие файла
    
    while(FileIsEnding(Handle)==false)                         // До тех пор, пока файловый...
        {                                                      // ...указатель не в конце файла
         // Чтение данных из строки до файлового разделителя
         str_1 = FileReadString(Handle);                       //  1 Номер индекса по первому измерению
         str_2 = FileReadString(Handle);                       //  2 Номер индекса по второму измерению
         str_3 = FileReadString(Handle);                       //  3 Значение
         str_4 = FileReadString(Handle);                       //  4 Значение
         str_5 = FileReadString(Handle);                       //  5 Значение
         
// А здесь заполнение массива
arr[str_1][str_2][0] = str_3;
arr[str_1][str_2][1] = str_3;
arr[str_1][str_2][2] = str_4;

         if(FileIsEnding(Handle)==true)                        // Файловый указатель в конце файла
              break;                                           // Выход из цикла чтения

         ????????????????????????????????????????????????????
        }
    FileClose(Handle);                                         // Закрываем файл
    return;                                                    // Выход из функции
   }

Bueno, es así. Y probablemente tendrás que convertir los índices de las cadenas en enteros.

 
AlexeyVik:

Olvida lo que escribiste después. Declara un array de tipo apropiado a nivel de variable global arr[][][3] y define la segunda dimensión por ti mismo.

Bueno, es así. Y probablemente tendrá que convertir los índices de las cadenas en enteros.


¡¡¡¡MUCHAS GRACIAS!!!! Cuando el cerebro hierve, uno se vuelve "ciego" y no ve las cosas simples y obvias. Lo más interesante es que sabes que la solución es sencilla, "como tres kopecks", pero, por desgracia, es un borrón delante de tus ojos.
¡¡¡¡¡Gracias de nuevo !!!!!
 
artmedia70:
No es necesario dar consejos estúpidos. Este comando eliminará todos los objetos del gráfico por completo.

No estoy de acuerdo contigo.

Había una pregunta:

¿Cómo eliminar todos los objetos como OBJ_ARROW_RIGHT_PRICE?

Solución:

ObjectsDeleteAll(0,OBJ_ARROW_RIGHT_PRICE); //удалить все объекты типа "Правая ценовая метка" в главном окне графика

¿Cómo es que la solución es estúpida?

 
isn-88:

No estoy de acuerdo contigo.

Había una pregunta:

Solución:

¿Y por qué la decisión es estúpida?

Por el hecho de que eliminará TODOS los objetos. Incluso los que NO pertenecen al EA/indicador. ¿Qué pasa si una persona lleva mucho tiempo marcando su propio código en un gráfico? ¿Y luego ejecutó este código en un indicador de terceros? ¿Cómo y qué diría entonces del autor de este buen código?
 
artmedia70:
¿Cómo y qué dice entonces del autor de este buen código?


La gente es amable. Dirán lo que les parezca.
 
Vinin:

La gente es amable. Dirán lo que piensan.
Sí, Vitya... la gente es mala hoy en día... Es triste.
 
isn-88:

No estoy de acuerdo contigo.

Había una pregunta:

Solución:

¿Y por qué la solución es estúpida?

En realidad todo comenzó con el comando: ObjectsDeleteAll(0,OBJ_ARROW_RIGHT_PRICE) ;

y luego otra variante intentó ObjectsDeleteAll(OBJ_ARROW_RIGHT_PRICE);

Estimado señor, lea la ayuda :)

No entiendo por qué mi índice con los comandos mencionados funciona correctamente en Alpha-Forex, pero en Saxo Bank los objetos ya no se borran.

Entonces empecé a experimentar con el script y éste dejó de borrar objetos en todos los terminales.

 

¡Salud a todos!

Se observa tal rareza del probador.

Después de cerrar las órdenes 152, 153, 158 y 159 el beneficio no es correcto (como si el probador calculara mal). Los pedidos han estado "colgados" durante varios meses, como se muestra en el cuadro. Además, el drawdown se muestra en la tabla correctamente pero no es visible en el gráfico por alguna razón.

¿Qué puede ser?


EURUSD (Euro vs. Dólar)

15 minutos (M15) 2012.01.01 23:00 - 2014.03.07 22:59 (2012.01.01 - 2014.03.08)

















1000.00



Difundir

Actual (12)

1418.73

Beneficio total

2045.28

Pérdida total

-626.55

3.26

Remuneración esperada

2.41



419.34

Reducción máxima

834.91 (58.98%)

Reducción relativa

58.98% (834.91)


















prueba

Tiempo

Tipo

Pida

Volumen

Precio

S / L

T / P

Beneficios

Saldo

372

2012.04.30 11:00

comprar

151

0.01

1.32193

0.00000

1.32472


373

2012.05.01 04:45

t/p

151

0.01

1.3247234

0.00000

1.32472

2.75

1402.41

374

2012.05.01 15:00

comprar

152

0.01

1.32262

0.00000

1.32713


375

2012.05.02 07:45

t/p

142

0.01

1.31949

0.00000

1.31949

-4.40

1398.00

376

2012.05.02 07:45

t/p

143

0.01

1.31949

0.00000

1.31949

0.95

1398.96

377

2012.05.02 07:45

t/p

149

0.02

1.31949

0.00000

1.31949

12.49

1411.44

378

2012.05.02 08:45

comprar

153

0.01

1.31711

0.00000

1.32237


379

2012.05.02 08:45

modificar

152

0.01

1.32262

0.00000

1.32237


380

2012.05.02 15:15

vender

154

0.01

1.31483

0.00000

1.31352


381

2012.05.03 07:00

t/p

154

0.01

1.3135174

0.00000

1.31352

1.18

1412.63

382

2012.05.03 08:45

vender

155

0.01

1.31454

0.00000

1.31425


383

2012.05.03 09:00

t/p

155

0.01

1.3142483

0.00000

1.31425

0.29

1412.92

384

2012.05.03 13:45

vender

156

0.01

1.31671

0.00000

1.31256


385

2012.05.04 10:45

t/p

156

0.01

1.3125581

0.00000

1.31256

4.11

1417.02

386

2012.05.04 14:15

vender

157

0.01

1.31527

0.00000

1.31293


387

2012.05.04 14:45

t/p

157

0.01

1.3129331

0.00000

1.31293

2.34

1419.36

388

2012.05.04 16:15

comprar

158

0.02

1.30997

0.00000

1.31742


389

2012.05.04 16:15

modificar

152

0.01

1.32262

0.00000

1.31742


390

2012.05.04 16:15

modificar

153

0.01

1.31711

0.00000

1.31742


391

2012.05.06 23:15

comprar

159

0.04

1.29845

0.00000

1.30918


392

2012.05.06 23:15

modificar

152

0.01

1.32262

0.00000

1.30918


393

2012.05.06 23:15

modificar

153

0.01

1.31711

0.00000

1.30918


394

2012.05.06 23:15

modificar

158

0.02

1.30997

0.00000

1.30918


395

2012.09.14 10:45

t/p

152

0.01

1.30918

0.00000

1.30918

-18.67

1400.70

396

2012.09.14 10:45

t/p

153

0.01

1.30918

0.00000

1.30918

-13.12

1387.58

397

2012.09.14 10:45

t/p

158

0.02

1.30918

0.00000

1.30918

-11.65

1375.93

398

2012.09.14 10:45

t/p

159

0.04

1.30918

0.00000

1.30918

22.77

1398.70

 
VoDyaMon:

En realidad todo comenzó con el comando: ObjectsDeleteAll(0,OBJ_ARROW_RIGHT_PRICE) ;

y luego probé otra variante: ObjectsDeleteAll(OBJ_ARROW_RIGHT_PRICE);

Estimado señor, lea la ayuda :)

No entiendo por qué mi índice con los comandos mencionados funciona correctamente en Alpha-Forex, pero en Saxo Bank los objetos ya no se borran.

Entonces empecé a experimentar con el script y éste dejó de borrar objetos en todos los terminales.

La primera se ve en la ventana principal del gráfico, la segunda en todas. Conclusión - 1) Utilizar el índice de ventana para reducir el número de objetos que la función recorre para encontrar los que deben ser eliminados. 2) Si elimina por nombre (parte del nombre, porque un programa mql suele nombrar los objetos con algún prefijo personal), entonces utilice el bucle de búsqueda desde el último objeto (más antiguo por el tiempo de creación).

Aunque efectivamente hay un problema con el borrado de objetos, si hay muchos y va de 0 a ObjectTotal()-1, entonces algunos de los objetos no se borran. Pregunta a los desarrolladores, tal vez no hay suficiente memoria intermedia asignada.

Ejemplo:

void DeleteObjects(int chartID, string prefix_obj_name) {
   string obj_nm="";
   int obj=ObjectsTotal();
 //  for(int k=0; k<obj; k++){  // неправильный вариант
   for(int k=obj-1; k>=0; k--){
      obj_nm = ObjectName(k);
      if(StringFind(obj_nm,prefix_obj_name)>=0) 
      { 
         ResetLastError();
         if(!ObjectDelete(chartID,obj_nm))
         {
            Print(__FUNCTION__,
            ": не удалось удалить объект ",obj_nm," Код ошибки = ",GetLastError());
         }
      }
   }
}
// prefix_obj_name = "Obj_MQLname_";   Имена объектов создаваемых программой "Obj_MQLname_Close_"+DoubleToStr(Close[0],Digits), "Obj_MQLname_Open_"+DoubleToStr(Open[0],Digits)   и т.д. 
 
¿Pueden decirme si Win 8 es compatible con MT 4 y MT 5? Lo pregunto porque tengo un mac y me estoy preguntando con qué sistema operativo comprar un PC. Un tipo incluso me mostró una captura de pantalla de MT 4 corriendo en 8. Pero como algunos compañeros afirman que no hay compatibilidad total, tengo que aclarar... Gracias.