Comúnmente, el control estocástico es la base de la negociación óptima (ya sea en la ejecución o en la creación de mercado). ¿Se ha investigado (o por qué no, si no se ha investigado nada) sobre Reguladores PID para estas aplicaciones?
Respuesta
¿Demasiados anuncios?Comprueba el código siguiente para ver la lógica básica. Puede que necesites improvisarlo (puede ser).Sólo un trabajo rápido y sucio. En caso de que funcione, reshare. ¡Que lo disfrutes!
Cómo funciona el controlador PID - un curso intensivo (rápido rápido) ?
- ¡¡¡El regulador PID trabaja en Error para minimizar el error !!! Vaya, eso sí que es un trabalenguas. Error(e) = SetPoint (SP) - ProcessValue (PV). Esto es lo más básico.
- Ahora hay tres términos en la ecuación del controlador PID que son en realidad multiplicadores
-
- kp - esto dicta cuánto cambia la salida con cada cambio de unidad si error (error de repetición).
-
- Kd - La parte difícil empieza a partir de aquí. Kd también es un múltiplo, pero es un múltiplo de la tasa de cambio del error, es decir, cuánto cambia el error con el tiempo. -3. Ki - Ki también es un múltiplo, pero es un múltiplo de un término que tiene memoria pasada del error, es decir, Ki multiplica la suma del error.
Ahora usted ve... Kp dicatats cuánto cambia la salida wrt a la diferencia entre el punto de ajuste y el valor real es decir, parte proprotional , Kd dicatact cómo la tasa de cambio de error afecta a la salida, ki dictar cuánto error se minimiza. Supongamos que el punto de ajuste y la salida son iguales, entonces el error es cero, no hay tasa de cambio de error y la suma de error también es cero.
`
//@version=5 indicator("PID Controller", overlay=false)
// Input Variables lookback = input.int(title="Lookback Period", defval=20, minval=1) kp = input.float(title="Kp", defval=0.1, minval=0) kd = input.float(title="Kd", defval=0.1, minval=0) ki = input.float(title="Ki", defval=0.1, minval=0) price_src = input(close, title="Price Source")
// Variables var float error = 0.0 var float error_sum = 0.0 var float error_diff = 0.0 var float pid = 0.0
// Arrays var float[] pid_array = array.new_float(0)
// Loop for i = 0 to 10 // Calculate error and PID error := price_src - ta.sma(price_src, lookback) error_sum := error_sum + error error_diff := error - nz(error[1]) pid := kp_error + ki_error_sum + kd*error_diff
// Add PID value to array
array.push(pid_array, pid)
// Wait for next bar
//bar_wait(0)
// Calculate average PID value var pid_sum = 0.0 for i = 0 to array.size(pid_array)-1 pid_sum := pid_sum + array.get(pid_array, i) var float pid_avg = pid_sum / array.size(pid_array)
// Plotting plot(pid_avg, color=color.green, linewidth=1, title="PID")
`