[Wrappers]: add ClipReward
diff --git a/gym/wrappers/__init__.py b/gym/wrappers/__init__.py
index 8aaf686b427..701db24dd23 100644
--- a/gym/wrappers/__init__.py
+++ b/gym/wrappers/__init__.py
@@ -3,4 +3,5 @@
 from gym.wrappers.time_limit import TimeLimit
 from gym.wrappers.dict import FlattenDictWrapper
 from gym.wrappers.atari_preprocessing import AtariPreprocessing
-from gym.wrappers.sign_reward import SignReward
+from gym.wrappers.clip_reward import ClipReward
+from gym.wrappers.sign_reward import SignReward
\ No newline at end of file
diff --git a/gym/wrappers/clip_reward.py b/gym/wrappers/clip_reward.py
new file mode 100644
index 00000000000..19cc1390900
--- /dev/null
+++ b/gym/wrappers/clip_reward.py
@@ -0,0 +1,14 @@
+import numpy as np
+
+from gym import RewardWrapper
+
+
+class ClipReward(RewardWrapper):
+    r""""Clip reward to [min, max]. """
+    def __init__(self, env, min_r, max_r):
+        super(ClipReward, self).__init__(env)
+        self.min_r = min_r
+        self.max_r = max_r
+
+    def reward(self, reward):
+        return np.clip(reward, self.min_r, self.max_r)
diff --git a/gym/wrappers/test_clip_reward.py b/gym/wrappers/test_clip_reward.py
new file mode 100644
index 00000000000..f1cbef209c6
--- /dev/null
+++ b/gym/wrappers/test_clip_reward.py
@@ -0,0 +1,21 @@
+import pytest
+
+import gym
+from gym.wrappers import ClipReward
+
+
+@pytest.mark.parametrize('env_id', ['CartPole-v1', 'Pendulum-v0', 'MountainCar-v0'])
+def test_clip_reward(env_id):
+    env = gym.make(env_id)
+    wrapped_env = ClipReward(env, -0.0005, 0.0002)
+
+    env.reset()
+    wrapped_env.reset()
+
+    action = env.action_space.sample()
+
+    _, reward, _, _ = env.step(action)
+    _, wrapped_reward, _, _ = wrapped_env.step(action)
+
+    assert abs(wrapped_reward) < abs(reward)
+    assert wrapped_reward == -0.0005 or wrapped_reward == 0.0002
