A tarefa é, em princípio, resolúvel na MQL4 ? - página 2

 

Dê-me o código, nós o descobriremos até hoje à noite.

Você pode colocá-lo em uma mensagem :)

 
tara:
Dê-me o código, descobriremos à noite.

#direitos autorais de propriedade intelectual "Copyright 2013, MetaQuotes Software Corp.
#link da propriedade "http://www.metaquotes.net"

//#incluir <WinUser32.mqh>
//int whwnd;
//#incluir <stdlib.mqh> // Biblioteca padrão
duplo b;
o dobro por cento;
maxpercente duplo = 0;
no tempo = 10;
int select time = 1;
status das cordas,status1;
int total;
int magic[100];
int kol=0;
int tempkol =0;
//+------------------------------------------------------------------+
//| função de inicialização especializada |
//+------------------------------------------------------------------+
int init()
{

retorno(0);
}
//+------------------------------------------------------------------+
//| função de desinicialização especializada |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
retorno(0);
}
//+------------------------------------------------------------------+
//| função de início especializado |
//+------------------------------------------------------------------+
int start()
{
// while(!IsStopped()) // até o usuário.
//// { // ...não pára de executar o programa
// RefreshRates();
b = AccountBalance()/100;
por cento = AccountProfit()/b;
se (maxpercente > por cento) maxpercente = por cento;
Timetoresume = TimeLocal();
se (porcentagem*(-1) > 1) status = "Freeze Active";
outro status = "Running" (Correndo);
total=OrdensTotal();
kol = 0;
para (int i=total; i>0; i--) { //atribuir cada elemento da matriz ao valor de cada ordem em aberto
OrderSelect (i-1,SELECT_BY_POS,MODE_TRADES);
magic[i] = OrderMagicNumber ();
// Imprimir ("Magia " + i+" " +magic[i];
}
para (int k = 1; k <= 1; k++){ // comparar o número mágico da primeira ordem aberta com as ordens subseqüentes
tempkol = mágico[k];
para ( int l = 1; l <=total;l++){
se (tempkol != magic[l]) kol++;
}
}
if(kol >= 2){ // se mais de 2 EAs já tiverem entrado no comércio
GlobalVariableSet ("Freeze1",200) ; // outros EAs devem ouvir estas variáveis globais
GlobalVariableSet ("Freeze2",200); // e não entrar em acordos, enquanto o resto deles tem tempo para abrir pedidos
status1="test2"; // conselheiro GlobalVariableSet ("Freeze1",200) faz, tendo esperado sua vez
} //volta no terminal
Comentário ( AccountProfit()
,"\n"
, "DrawDown " , NormalizeDouble (%,1)*(-1), " % ", " MaxDrawDown " , NormalizeDouble (maxpercent,1)*(-1), " % "
, timetoresume
,"\n"
",status", ",percentual*(-1)
,"\n"
total de pedidos", total
,"\n"
, "OrderSymbol()," Magic ",OrderMagicNumber()," ",kol
\n",", ",status1
);
retornar;
}

//+------------------------------------------------------------------+

Não julgue, da última vez que escrevi um programa em Sinclair, na Basic, quando estava na escola .....


 
Zakyza:


É possível estabelecer um sistema de prioridades na MQL4, para que primeiro seja executado o código da EA gerencial e depois todas as outras EAs?


É claro que isso é possível.

Organizar o trabalho de EAs de acordo com o esquema "mestre-escravo

 
avtomat:


É claro que você pode.

Organizar conselheiros mestre-escravo para trabalhar de uma forma "mestre-escravo


Por favor, me diga mais sobre como fazê-lo. Os Trading Expert Advisors só podem ser influenciados pela mudança da variável global e eles ouvem esta variável GlobalVariableSet ("Freeze1",200) quando meu "gerente" se dignar a esperar sua vez e escrever lá 200
 
Zakyza:

Por favor, me fale mais sobre como organizar isto. Os Trading Expert Advisors só podem ser influenciados pela mudança do valor da variável global e eles ouvem esta variável GlobalVariableSet ("Freeze1",200) quando o meu "gerente" se dignar, esperando pela sua vez, a escrever 200 lá

Por que seu gerente, se ele é o gerente, espera por algum tipo de volta?

São os escravos que devem esperar pelo deles: o gerente escreveu uma proibição comercial na GV - eles se sentam, ficam quietos (o escravo checou a bandeira global primeiro, se 'não se sentarem bleep' - disse JawolGerGeneral, e retornam(0))...

Por que seu gerente está esperando sua vez de acessar a bandeira da GV?

 
Tudo isso é feito por um Consultor Especializado )))) Você pode enfiar 100 pares nele ))))
 
artikul:
Tudo isso é feito por um Consultor Especializado )))) Você pode enfiar 100 pares nele ))))

não é disso que estamos falando...
 

mestre

//+------------------------------------------------------------------+
int deinit()
  {
      GlobalVariableSet(work,0);   // запрещение работы ведомым
   return(0);
  }
//+------------------------------------------------------------------+
.....

int start()
   .....

   work=GlobalVariableGet(work);

   if( work==0 && всё_хорошо )   GlobalVariableSet(work,1);   // разрешение работы ведомым

   if( work==1 && всё_плохо )    GlobalVariableSet(work,0);   // запрещение работы ведомым

// можно организовать систему запретов/разрешений любой сложности   

   .....

escravo

.....

int start()


   work=GlobalVariableGet(work);

   if( work==0 )   { стоп } ;    // здесь возможны некоторые действия для завершения текущих процессов

   if( work==1 )   { работа };   // ведомым разрешена работа -- можно работать в нормальном режиме

.....

Espero ter me feito entender.

 
avtomat:

mestre

escravo

Espero ter me feito entender.


Tudo limpo, obrigado.

Eu tentei desta maneira (ou seja, proibir e permitir de acordo com a situação), mas funciona da seguinte maneira para mim:

Após esta inicialização do mestre: int deinit().... // proibição de trabalho por escravos é silenciosa, mas assim que o mago relaxa ( se (número de majik idênticos <=2) ) e escreve em GlobalVariableSet(trabalho,1); // permitindo escravos , e há 8 escravos em 8 pares diferentes, conseguem abrir em 4 - 6 pares ao invés de 2 como especificado na condição do mestreAbrem ANTES que o mestre "entenda" que o "número de majícies idênticas" é significativamente maior do que 2. Depois disso, é claro, os outros escravos ficam em silêncio, mas não é mais aberto 2 cópias como desejado, mas 4 - 6.

Como eu entendo, o controle é dado aos EAs escravos int start ( ) após executar o código int start() e depende do int start( )dos EAs escravos e de quantas cópias de cada par serão abertas antes do início do assistente e um global se torna proibitivo. Por favor, me corrija se entendi mal o algoritmo do terminal e a essência do problema. Mais ou menos assim: se um senhor e um escravo têm mais probabilidades de trabalhar corretamente, mas os escravos então 8-10!

Foi por isso que escrevi, tentei fazer um loop start master e fazê-lo permanecer ligado para sempre, mas meu terminal simplesmente ficou pendurado.

artmedia70: " por que seu gerente, se é um gerente, está esperando por algum tipo de fila? " - isso é o que eu gostaria de saber.

 

E por que e por que dois mágicos idênticos estão sendo feitos?

As variáveis globais podem ser usadas para atribuir áreas mágicas não sobrepostas aos EAs incluídos. As verificações e atribuições correspondentes são feitas no init().

Além disso, podemos limitar o número de ordens abertas para cada símbolo especificando-o explicitamente ou atribuindo um mestre, dependendo da situação geral atual, que é exatamente o que o mestre deve controlar.

Isto significa que se o escravo faz uma ação, ele tem que se reportar ao mestre. O mestre, por sua vez, deve dar seu resumo, do qual dependem as demais ações (ou inação) do escravo.